在我的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。还有什么可能导致这种行为?
答案 0 :(得分:0)
使用多个长按识别器同时工作是一种糟糕的方法。如果您没有通过他们的代表指定他们应该同时识别触摸,那么所有识别器都会在链中的前一个链接失败后通过链进行反应。
但您也可以为所有识别器实现委托回调:
- (BOOL)gestureRecognizer:shouldRecieveTouch:
并检查触摸是否适合相应的识别器。如果是 - 您可以在此委托回调中禁用所有其他识别器,并在合适的识别器处理触摸后,再次重新启用它们。