2012-05-11 13 views
11

私のプログラムでは、私はで初期化したUITapGestureRecognizerを持っています。私はPlanetTapped: (UIImageView *)aPlanetという名前でメソッドを呼び出すセレクタを渡しました。これでメソッドは正常に呼び出されますが、のように、引数をaction:に渡す方法を知りたいと思います。これはポップスブルですか? UIGestureRecognizerのセレクタに引数を送ることができるようにするのが理にかなっています。どんな助けもありがとうございます。ジェスチャ認識器の初期化セレクタへの引数の送信?

答えて

13

メソッドが呼び出すための正しい署名は次のようになります。

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer 

、あなたが呼び出すことでジェスチャーを受け取ったビューにアクセスできます。

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer { 

    UIImageView* aPlanet = gestureRecognizer.view; 
    ... 
} 

確かに、これは何UIGestureRecognizer reference状態です。

ジェスチャ認識プログラムには、1つ以上のターゲットアクションペアが関連付けられています。複数のターゲット - アクション対がある場合、それらは離散的であり、累積ではない。ジェスチャーの認識は、それらのペアのそれぞれに対するターゲットへのアクションメッセージのディスパッチをもたらす。呼び出されたアクションメソッドは、次のシグネチャのいずれかに適合しなければならない:

  • (ボイド)handleGesture。
  • (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;
+0

ああ、もちろん。私はそれを考えていたはずです。ご協力いただきありがとうございます! – Fitzy

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 
} 

これらはあなたを助けるでしょう願っています。次のようスウィフト3.0では

0

、関数のシグネチャは、(これらの例では、必要に応じて他のジェスチャー認識のクラスを置き換え)です:

func myButtonLongTouch(_ sender: UILongPressGestureRecognizer) 

次のようにジェスチャー認識機能を設定するときは、この関数を参照:

if let button = sender.view as? UIButton { 
    // Your code here 
} 
longTouchGesture = UILongPressGestureRecognizer(target: self, action: #selector(myButtonLongTouch(_:))) 

その後、押された(私の場合、ボタンに)ビューにアクセスするには、コードを使用します

最後に、この関数は(一般的にジェスチャーが開始されたとき、それが終了したときに)複数回呼び出されるので、あなたは、次のようにあなたが行うことができます、状態を確認したいと思うことを忘れないでください:

if (sender.state == UIGestureRecognizerState.ended) { 
    // Your code here 
} 
関連する問題