kub*_*ubi 221 objective-c uigesturerecognizer ios
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTapTap:)];
[self.view1 addGestureRecognizer:tapGesture];
[self.view2 addGestureRecognizer:tapGesture];
[tapGesture release];
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,只view2识别了点击.如果我注释掉第三行,那么点击就会view1被识别出来.如果我是对的,你只能使用一次手势识别器,我不确定这是一个bug还是只需要一些文档.
Tom*_*ift 323
A UIGestureRecognizer将与单个视图一起使用.我同意文件不稳定.这UIGestureRecognizer有一个view属性让它离开:
视图
手势识别器附加到的视图.(只读)
@property(非原子,只读)UIView*视图
讨论使用addGestureRecognizer:方法将手势识别器附加(或添加)到UIView对象.
小智 48
我使用下面的方法绕过它.
for (UIButton *aButton in myButtons) {
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
longPress.minimumPressDuration=1.0;
[aButton addGestureRecognizer:longPress];
[longPress release];
}
Run Code Online (Sandbox Code Playgroud)
然后在我的handleLongPress方法中,我只是设置一个UIButton等于手势识别器的视图,并根据该按钮分支我做的事情
- (void)handleLongPress:(UILongPressGestureRecognizer*)gesture {
if ( gesture.state == UIGestureRecognizerStateEnded ) {
UIButton *whichButton=(UIButton *)[gesture view];
selectedButton=(UIButton *)[gesture view];
....
}
Run Code Online (Sandbox Code Playgroud)
Geo*_*sda 18
对于Swift 3,万一有人要求:基于上面的Bhavik Rathod答案.
func setGestureRecognizer() -> UIPanGestureRecognizer {
var panRecognizer = UIPanGestureRecognizer()
panRecognizer = UIPanGestureRecognizer (target: self, action: #selector(pan(panGesture:)))
panRecognizer.minimumNumberOfTouches = 1
panRecognizer.maximumNumberOfTouches = 1
return panRecognizer
}
///set the recognize in multiple views
view1.addGestureRecognizer(setGestureRecognizer())
view2.addGestureRecognizer(setGestureRecognizer())
Run Code Online (Sandbox Code Playgroud)
小智 9
我们可以做这样的事情,简单易行
1)在控制器中创建如下函数(此函数将返回GestureRecognizer)
-(UITapGestureRecognizer*)setRecognizer{
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openProfile)];
[gestureRecognizer setNumberOfTapsRequired:1];
return gestureRecognizer;
}
Run Code Online (Sandbox Code Playgroud)
2)现在在多个视图中设置此识别器
[self.view1 addGestureRecognizer:[self setRecognizer]];
[self.view2 addGestureRecognizer:[self setRecognizer]];
Run Code Online (Sandbox Code Playgroud)
不,你不应该将手势识别器附加到多个视图.
Apple文档中有这些明确的信息:
手势识别器附加到视图中
每个手势识别器都与一个视图相关联.相比之下,视图可以具有多个手势识别器,因为单个视图可以响应许多不同的手势.要使手势识别器识别特定视图中发生的触摸,您必须将手势识别器附加到该视图.
适用于iOS的事件处理指南 - 手势识别器 Apple Developer Library
虽然其他人提到他们可能在某些情况下工作,但它显然违反了文档,并且可能会在未来的任何iOS版本中发生变化.
您可以做的是为要监视的视图添加单独的手势识别器,他们可以共享一个共同的操作.
| 归档时间: |
|
| 查看次数: |
72512 次 |
| 最近记录: |