とにかく使用するにはサブクラス化する必要がtouchesBegan
あります。touchesMoved
あなたUISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionLeft
が言ったように、2 つの s を設定しますCGRect
。1 つは許容可能な開始点用で、もう 1 つは許容可能な終了点用です。次に、UIGestureRecognizerDelegate
メソッドgestureRecognizer:shouldReceiveTouch:
を使用し、 を使用して、タッチ ポイントが許容可能な開始矩形内にあるかどうかを確認しCGRectContainsPoint()
ます。次に(私が思うに)UISwipeGestureRecognizer
サブクラスでオーバーライドtouchesEnded:withEvent:
し、エンドタッチが許容範囲内にあるかどうかを確認します。そうでない場合は、状態をに設定しUIGestureRecognizerStateCancelled
ます (または、ジェスチャをキャンセルすることになっています)。また、アタッチ先のビューにmultipleTouchEnabled
プロパティが設定されていることを確認してください。私は実際にこれを試したことはありませんが、何かがそれを行うはずです。幸運を!
編集
実際、受け入れ可能な開始点/終了点の特定の rect 値について心配する必要がなく、デバイスに依存しないようにする場合は、次のようにすることができます。
//swap in whatever percentage of the screen's width/height you want in place of ".75f"
//set the origin for acceptable start points
CGFloat startRect_x = self.view.frame.size.width * .75f;
CGFloat startRect_y = self.view.frame.size.height * .75f;
//set the size
CGFloat rectWidth = self.view.frame.size.width - startRect_x;
CGFloat rectHeight = self.view.frame.size.height - startRect_y;
//make the acceptable start point rect
CGRect startRect = CGRectMake(startRect_x, startRect_y, rectWidth, rectHeight);
//set the origin for the accepable end points
CGFloat endRect_x = self.view.center.x - rectWidth/2;
CGFloat endRect_y = self.view.center.y - rectHeight/2;
//make the acceptable end point rect
CGRect endRect = CGRectMake(endRect_x, endRect_y, rectWidth, rectHeight);