3 本指のピンチを実装しようとすると、いくつかの問題が発生します。
個人的には2本指ローテーションで2本指ピンチを使ってきました!(同時のジェスチャーは必要ありません、または必要ありません)問題は、両方が非常に似ているため、多くの場合、システムが間違った動きを識別することです。そのため、システムに識別させるために、指を離してもう一度押す必要があります回転 (通常は最初にピンチを識別します)
delayBegin
が役立つかどうか、または同時ジェスチャーをアクティブにすることができるかどうかをよく検索しましたが、どれもうまくいきませんでした。回転するより)。
問題は、ご存知のように、ピンチが 2 本の指でしか機能しないことです。そこで、 をサブクラス化し、UIPinchGestureReconizer
画面上に 3 本の指がある場合にのみ機能させることにしました。残りは、標準のピンチが機能するように機能し、(スケールを計算するために)3 本目の指を無視しても機能しますが、3 本目の指がまだ画面上にあることを確認してください。
ThreeFingerPinchRecognizer
だから私は私の(そのサブクラスはUIPinchGestureRecognizer
)のために次の実装を試しました
@implementation GRThreeFingerPinchRecognizer
-(id)initWithTarget:(id)target action:(SEL)action
{
self = [super initWithTarget:target action:action];
if(self){
}
return self;
}
- (void)reset
{
[super reset];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
int numberOfTouches = event.allTouches.count;
if (numberOfTouches == 3)
{
[super touchesBegan:touches withEvent:event];
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
int numberOfTouches = event.allTouches.count;
if (numberOfTouches == 3)
{
[super touchesMoved:touches withEvent:event];
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesCancelled:touches withEvent:event];
}
ご覧のとおり、2 本指ピンチと同じ機能を取得しようとしています (関数を呼び出すだけ[super]
で、touchesBegan
およびtouchesMoved
関数で、画面上に 3 本の指があるかどうかをテストしています ( event.alltouches.count
)
これで2本指での回転はバッチリ効くのですが、ピンチがあまり効かず、発動しにくく、発動しても2本指のピンチとしては機能しません…
私はこれを完全に間違っているかもしれないことを知っているので、どんな助けも素晴らしいでしょう!!
どうもありがとうございました!