如何使用Autolayout在子视图中创建UIGestureRecognizer?

时间:2015-12-23 20:13:10

标签: ios swift autolayout uigesturerecognizer

当我尝试在子视图中使用UIGestureRecognizer时,它的帧在superviewcontroller中通过Autolayout指示,它不会响应手势。我相信这是因为手势识别器不知道视图的真实尺寸,如Autolayout约束所描述的那样。怎么解决这个问题?这是我的代码:

resize(100, 100)

提前致谢。

1 个答案:

答案 0 :(得分:1)

您的方法存在两个问题(自动布局不是问题):

  1. 您必须在userInteractionEnabled = true班级
  2. 上设置MyLabel
  3. 添加手势识别器时,您必须确保delegate不是nil。您可以通过添加将委托作为参数
  4. 的初始化程序来实现

    以下是如何使其工作(无需保持对手势识别器的引用):

    class MyLabel: UILabel {
        var delegate: MyProtocolForSwipeRecognition
    
        init(withDelegate delegate: MyProtocolForSwipeRecognition) {
            self.delegate = delegate
            let gestureRecognizer = UISwipeGestureRecognizer(target: delegate, action: "swiped")
            super.init(frame: CGRectZero)
            addGestureRecognizer(gestureRecognizer)
            userInteractionEnabled = true
        }
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }
    

    然后,您可以在实现协议的类中初始化您的标签:

    let label = MyLabel(withDelegate: self)