2012-05-07 25 views

回答

4

可以實現對UIPanGestureRecognizer委託方法。檢查手勢的位置是否在您感興趣的邊界內。對於應該*方法,您可以返回false來取消手勢。手勢一旦開始,您可以通過將State屬性設置爲Cancelled來取消它。

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