在我的程序中,我有一个UITapGestureRecognizer
用initWithTarget: action:
. 我传入了一个选择器来调用一个名为PlanetTapped: (UIImageView *)aPlanet
. 这很好地调用了该方法,但是我想知道如何action:
像使用performSelector: withObject
. 这是可能的吗?允许您向UIGestureRecognizer
' 选择器发送参数是有意义的。任何帮助表示赞赏。
问问题
12845 次
3 回答
13
要调用的方法的正确签名是:
-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer
然后你可以通过调用来访问接收到手势的视图:
-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer {
UIImageView* aPlanet = gestureRecognizer.view;
...
}
事实上,这就是UIGestureRecognizer 参考状态:
手势识别器有一个或多个与之关联的目标-动作对。如果有多个目标-动作对,它们是离散的,而不是累积的。手势的识别导致将动作消息发送到每个对的目标。调用的操作方法必须符合以下签名之一:
- (void)handleGesture;
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;
于 2012-05-11T10:26:58.860 回答
6
- (void)viewDidLoad
{
UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressOnPhotos:)];
[yourView addGestureRecognizer:longPressRecognizer];
}
- (IBAction)handleLongPressOnPhotos:(UILongPressGestureRecognizer *)sender{
// use "sender.view" to get the "yourView" you have long pressed
}
希望这些对你有帮助。
于 2012-05-11T10:34:34.677 回答
0
在 Swift 3.0 中,函数签名如下(在这些示例中适当地替换另一个手势识别器类):
func myButtonLongTouch(_ sender: UILongPressGestureRecognizer)
您在设置手势识别器时引用此函数,如下所示:
longTouchGesture = UILongPressGestureRecognizer(target: self, action: #selector(myButtonLongTouch(_:)))
然后,要访问被按下的视图(在我的例子中是一个按钮),请使用以下代码:
if let button = sender.view as? UIButton {
// Your code here
}
最后,不要忘记这个函数被多次调用(通常是在手势开始和结束时),所以你需要检查状态,你可以这样做:
if (sender.state == UIGestureRecognizerState.ended) {
// Your code here
}
于 2016-10-19T00:41:41.697 回答