3

我在 IB 中的 MapView 中添加了 3 个手势识别器,长按、平移和捏合。他们的代表是文件的所有者。我像这样设置它们 -

public override void ViewDidLoad ()
{
        base.ViewDidLoad ();

        PanGestureRecognizer.AddTarget(s => { Console.WriteLine("Pan"); } );
        LongPressGestureRecognizer.AddTarget(s => { Console.WriteLine("Long press"); } );
        PinchGestureRecognizer.AddTarget(s => { Console.WriteLine("Pinch"); } );

}

我也实现了这个-

public bool ShouldRecognizeSimultaneously (UIGestureRecognizer gestureRecognizer, UIGestureRecognizer otherGestureRecognizer)
{
    return true;
}

问题是,只有长按手势识别器会做任何事情,其他的都被完全忽略了。

欢迎任何想法/建议!

4

1 回答 1

2

作为 Monotouch 的新手,我没有意识到当我在 IB 中将 MapView 的委托设置为我的 ViewController 时,这实际上是行不通的。我需要创建一个委托,它是 UIGestureRecognizerDelegate 的子类,并将gestureRecognizer 的委托设置为此,我以编程方式添加了gestureRecognizer(尽管这可能不是必需的) -

private class GestureRecognizerDelegate : UIGestureRecognizerDelegate
{
    public override bool ShouldRecognizeSimultaneously (UIGestureRecognizer gestureRecognizer, UIGestureRecognizer otherGestureRecognizer)
    {
        return true;
    }
}


public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    UIPinchGestureRecognizer pinchGestureRecognizer = new UIPinchGestureRecognizer(s => { /* do stuff here */ } );

    GestureRecognizerDelegate gestureRecognizerDelegate = new GestureRecognizerDelegate();
    pinchGestureRecognizer.Delegate = gestureRecognizerDelegate;

    MapView.AddGestureRecognizer(pinchGestureRecognizer);
}

然后,通过将 MapView 的 ZoomEnabled 属性设置为 false,我可以控制地图的缩放方式(在我的情况下,我必须防止地图放大超过某个阈值,我的客户对您可以缩放的方式不满意in & 然后它会反弹回我的预设值,这是我在 MapView 委托中使用 RegionChanged 工作的)。你不爱客户吗!

于 2013-06-18T13:40:17.777 回答