11

私のプログラムには、UITapGestureRecognizerで初期化したがありますinitWithTarget: 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リファレンスが述べていることです。

ジェスチャレコグナイザには、1つ以上のターゲットとアクションのペアが関連付けられています。複数のターゲットとアクションのペアがある場合、それらは離散的であり、累積的ではありません。ジェスチャを認識すると、これらのペアのそれぞれのターゲットにアクションメッセージがディスパッチされます。呼び出されるアクションメソッドは、次のいずれかのシグネチャに準拠している必要があります。

  • (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 に答える