2012-05-07 27 views
2

PanGestureRecognizerの境界を設定して、限られた領域/ビュー内の画像のみをパンすることはできますか?PanGestureRecognizerの限定領域

は非常にmutchありがとう;)

答えて

4

あなたはUIPanGestureRecognizerためのデリゲートメソッドを実装することができます。あなたが興味のある範囲にジェスチャーの場所があるかどうかを確認してください。should *メソッドの場合、falseを返してジェスチャーを取り消すことができます。ジェスチャーが開始されたら、StateプロパティをCanceledに設定してジェスチャーを取り消すことができます。

public class GestureView: UIView 
{ 
    RectangleF _bounds; 

    public GestureView (RectangleF rect) : base (rect) 
    { 
     this.BackgroundColor = UIColor.Brown; 

     UIPanGestureRecognizer pan = new UIPanGestureRecognizer (this, new Selector ("panViewWithGestureRecognizer:")); 
     this.AddGestureRecognizer (pan); 
     pan.WeakDelegate = this; 
     _bounds = new RectangleF (0,0,200, 100); 
    } 

    [Export("panViewWithGestureRecognizer:")] 
    void PanGestureMoveAround (UIPanGestureRecognizer p) 
    { 
     if (_bounds.Contains (p.LocationInView (this))) 
     { 
      Console.WriteLine ("PanGestureMoveAround true"); 
      return; 
     } 
     Console.WriteLine ("PanGestureMoveAround false"); 
     p.State = UIGestureRecognizerState.Cancelled; 
     return; 
    } 

    [Export ("gestureRecognizerShouldBegin:")] 
    bool ShouldBegin (UIGestureRecognizer recognizer) 
    { 
     if (_bounds.Contains (recognizer.LocationInView (recognizer.View))) 
     { 
      Console.WriteLine ("ShouldBegin true"); 
      return true; 
     } 
     Console.WriteLine ("ShouldBegin false"); 
     return false; 
    } 

    [Export ("gestureRecognizer:shouldReceiveTouch:")] 
    public bool ShouldReceiveTouch (UIGestureRecognizer recognizer, UITouch touch) 
    { 
     if (_bounds.Contains (touch.LocationInView (recognizer.View))) 
     { 
      Console.WriteLine ("ShouldReceiveTouch true"); 
      return true; 
     } 
     Console.WriteLine ("ShouldReceiveTouch false"); 
     return false; 
    } 
} 
+0

「_bounds.Contains」は非常に役に立ちました;) – Alex