11

在我的程序中,我有一个UITapGestureRecognizerinitWithTarget: action:. 我传入了一个选择器来调用一个名为PlanetTapped: (UIImageView *)aPlanet. 这很好地调用了该方法,但是我想知道如何action:像使用performSelector: withObject. 这是可能的吗?允许您向UIGestureRecognizer' 选择器发送参数是有意义的。任何帮助表示赞赏。

4

3 回答 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 回答