gpt4 book ai didi

ios - 带闭包的 UIGestureRecognizer

转载 作者:搜寻专家 更新时间:2023-10-31 21:58:37 25 4
gpt4 key购买 nike

我有一个 View ,我想在其中执行向右滑动的手势。不幸的是我收到错误EXC_BAD_ACCESS。有人知道这里出了什么问题吗?请看下面的代码。

extension UIView {

func addGestureRecognizerWithAction(nizer: UIGestureRecognizer, action:() -> ()) {

class Invoker {
var action:() -> ()
init(action:() -> ()) {
self.action = action
}
func invokeTarget(nizer: UIGestureRecognizer) {
self.action()
println("Hi from invoker")
}
}
addGestureRecognizer(nizer)
nizer.addTarget(Invoker(action), action: "invokeTarget:")
}
}

class BugView: UIView {

override func awakeFromNib() {
super.awakeFromNib()

var swipeRight = UISwipeGestureRecognizer()
swipeRight.direction = UISwipeGestureRecognizerDirection.Right
self.addGestureRecognizerWithAction(swipeRight) {
println("Hi from the gesture closure")
}
}
}

最佳答案

对于那些不喜欢关联对象和其他困难事物的人,我有一个不需要任何操作的小型手势识别器。而且它不需要存储在某个地方。像普通 GR 一样工作。虽然它有一些限制 - 它是从 UITapGestureRecognizer 继承的,他只知道如何处理点击。但是我们经常需要所有的类型吗?我个人不是。

final class BindableGestureRecognizer: UITapGestureRecognizer {
private var action: () -> Void

init(action: @escaping () -> Void) {
self.action = action
super.init(target: nil, action: nil)
self.addTarget(self, action: #selector(execute))
}

@objc private func execute() {
action()
}
}

使用示例:

    let gestureRecognizer = BindableGestureRecognizer {
print("It's alive!")
}
self.view.addGestureRecognizer(gestureRecognizer)

万一出现一些更有意义的台词,别忘了【弱势 self 】。我们不想创造那些不死的伙伴。

    let colorGestureRecognizer = BindableGestureRecognizer { [weak self] in
self?.view.backgroundColor = .red
}
self.view.addGestureRecognizer(colorGestureRecognizer)

对我来说,从那些 @objc 一行中净化我们的 View Controller 并变得更加.. react 性似乎很方便?

关于ios - 带闭包的 UIGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26223944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com