应用程序中有超过5个UILongPressGestureRecognizers

时间:2015-03-14 12:36:02

标签: ios xcode swift uigesturerecognizer

在我的swift ios应用程序中。我使用下面的代码在我的屏幕上创建一个圆形UIView。然后我向它添加一个UILongPressGestureRecognizer,保持视图本身以及各自数组中的gestureRecognizer。每次用户触摸并按住此视图时,代码将再次运行并创建另一个视图并向其添加另一个UILongPressGestureRecognizer。

    let x = CGFloat(arc4random_uniform(UInt32(sW-w)))
    let y = CGFloat(arc4random_uniform(UInt32(sH-h-10)))+15

    circle.append(UIButton())
    touch.append(UILongPressGestureRecognizer())
    let l = circle.count-1

    circle[l].frame = CGRect(x:x, y:y, width:70, height:70)

    circle[l].backgroundColor = UIColor.redColor()
    circle[l].layer.cornerRadius = w/2
    circle[l].clipsToBounds = true

    touch[l].addTarget(self, action: "touched:")
    touch[l].minimumPressDuration = 0
    touch[l].numberOfTouchesRequired = 1
    touch[l].numberOfTapsRequired = 0
    touch[l].allowableMovement = 0
    touch[l].delegate = self

    circle[l].addGestureRecognizer(touch[l])
    self.view.addSubview(circle[l])

现在,当我运行应用程序时,我可以点击并按住圆圈视图,其状态更改为.Began,它还会触发.Changed和.Ended状态最多5个视图。但是当添加第6个视图时,手势识别器不会对其进行操作。

Apple文档中没有任何关于可同时使用的最大数量的gestureRecognizer。还有什么可能导致这种行为?

1 个答案:

答案 0 :(得分:0)

使用多个长按识别器同时工作是一种糟糕的方法。如果您没有通过他们的代表指定他们应该同时识别触摸,那么所有识别器都会在链中的前一个链接失败后通过链进行反应。

但您也可以为所有识别器实现委托回调:

- (BOOL)gestureRecognizer:shouldRecieveTouch:

并检查触摸是否适合相应的识别器。如果是 - 您可以在此委托回调中禁用所有其他识别器,并在合适的识别器处理触摸后,再次重新启用它们。