我创建了很多视图和按钮,然后我以图形方式创建了 ISwipeGestureRecognizer。并为识别器“引用插座集合”添加了很多视图。滑动手势适用于我的所有视图。这怎么可能?Storyboard 会自动为每个连接的 UIView 创建不同的 SwipeRecognizers?
我不能以编程方式添加更多视图,为什么?
我创建了很多视图和按钮,然后我以图形方式创建了 ISwipeGestureRecognizer。并为识别器“引用插座集合”添加了很多视图。滑动手势适用于我的所有视图。这怎么可能?Storyboard 会自动为每个连接的 UIView 创建不同的 SwipeRecognizers?
我不能以编程方式添加更多视图,为什么?
我从未尝试过您用 Storyboard 描述的内容,因此无法直接回答,但我可以建议一种方法来验证是否创建了多个手势识别器:在您的手势操作方法中,添加一条NSLog
语句以记录识别器的地址(此是传递给 action 方法的第一个参数)。这样,您将验证是否重复使用了相同的识别器。
此外,记录该recognizer.view
属性以查看引擎盖下发生了什么。如果您在所有情况下都得到相同的结果,那么可以乐观地推断,UISwipeRecognizer
它没有在内部使用它的view
属性来做任何事情,并且该信息仅存储供您的操作回调能够访问它。
一个谜是你只有一个手势识别器和不同的view
属性值。这意味着属性值会即时更改,但我无法解释如何。
您可以将手势识别器连接到 Interface Builder 中的多个视图。触摸时,它们都会发送正确的消息。但是,您无法使用识别器的 view 属性检测到哪个视图被触摸。无论触摸的视图如何,它都将始终指向同一个视图。
我不相信你可以对代码做同样的事情。是的,这很奇怪。
因此,只要您不在乎哪个视图触发了触摸,您就可以了。
您可以在代码中或使用界面构建器将单个手势识别器添加到任意数量的视图中。为此,您使用 的addGestureRecognizer:
方法UIView
。请注意,您将识别器添加到视图中,而不是相反。