私のプログラムには、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リファレンスが述べていることです。
ジェスチャレコグナイザには、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 に答える