そのジェスチャ認識エンジンを現在の状態で複製したいだけの場合は、次のようになります。
UIPanGestureRecognizer *r = [[UIPanGestureRecognizer alloc] initWithTarget:self
action:action];
r.minimumNumberOfTouches = a.panGestureRecognizer.minimumNumberOfTouches;
r.maximumNumberOfTouches = a.panGestureRecognizer.maximumNumberOfTouches;
[self addGestureRecognizer:r];
r
ただし、およびに発生する変更を確認したい場合は、a.panGestureRecognizer
これを処理するヘルパー クラスを設定できます。
たとえば、次のようなものです。
@interface GestureHandler: NSObject
// ...
- (void)setNewMinTouches(unsigned int)num;
// Weak references to a and r (for example)
@property (nonatomic, weak) UIPanGestureRecognizer *gestureRecognizerFromA;
@property (nonatomic, weak) UIPanGestureRecognizer *gestureRecognizerR;
@end
@implementation GestureHandler
// ...
- (void)setNewMinTouches(unsigned int)num {
self.gestureRecognizerFromA.minimumNumberOfTouches = num;
self.gestureRecognzierR.minimumNumberOfTouches = num;
}
// ... and so on.
@end
その場合、クラスを介して 2 つのジェスチャ レコグナイザーとのみ対話するように注意する必要がありますGestureHandler
(特に同期を取りたくない場合を除きます)。
katzenhut が指摘しているように、このクラスを使用して、必要に応じてジェスチャ認識機能を生成することもできます。ただし、標準-initWithTarget:action:
はそれ自体で非常に便利です。
ちなみに、[gestureRecogniser copy]
うまくいかない理由はUIGestureRecognizer
が実装されていないから-copy
です。したがって、メッセージがジェスチャ レコグナイザーに送信さ-copy
れると、サブクラスのオーバーライド ポイントであるため、例外をスローするように設計された NSObject のメソッドが呼び出されます。