Ограниченная область для PanGestureRecognizer

Можно ли установить границы для PanGestureRecognizer, чтобы он мог панорамировать изображение только в ограниченной области/представлении?

большое тебе спасибо ;)


person Alex    schedule 07.05.2012    source источник


Ответы (1)


Вы можете реализовать методы делегата для UIPanGestureRecognizer. Проверьте, находится ли местоположение жеста в интересующих вас границах. Для методов should* вы можете вернуть 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;
    }
}
person holmes    schedule 08.05.2012
comment
Спасибо, _bounds.Contains очень помог;) - person Alex; 10.05.2012