ios – 将平移手势传递给MKMapView

编辑:将使我更清楚我想要实现的目标.

我在MKMapView上有一些注释,我想让它易于拖动.移动注释的标准Apple方法是点击一次然后快速点击并按住并拖动.该应用程序的用户抱怨说这样做太难了.

所以从技术上来说,我想做的就是使用平移手势.问题是MKMapView还使用平移手势来移动地图.

我想做的是当使用平移手势时,检查平移手势是否真的接近注释,如果是,那么让平移手势处理程序移动注释.我有这部分工作.

但是如果平移手势不接近注释,则将手势放到MKMapView上以便由它处理.

//编辑结束

我有一种处理平移手势的方法.当我在MKMapView上有一个平移手势时,可以调用此方法.有时我不想在我的方法中处理手势,而是将手势传递到MKMapView以平常地平移/拖动地图.

这是我到目前为止所得到的概述.
平移手势正由该方法处理:

-(void)panGesture:(UIPanGestureRecognizer*)sender

根据某些逻辑,我想将此手势传递给MKMapView(self.mapView).
有人可以共享代码吗?

我试过[self.mapView gestureRecognizerShouldBegin:sender];但这次电话没有任何结果.

- (void) addPanGesture
{
    self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)];
    self.panGesture.delegate = self;
    [self.panGesture setMinimumNumberOfTouches:1];
    [self.panGesture setMaximumNumberOfTouches:1];
    [self.mapView addGestureRecognizer:self.panGesture];

}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer     shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer     *)otherGestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    BOOL result = NO;
    if ((gestureRecognizer == self.panGesture) && [[otherGestureRecognizer view] isDescendantOfView:[gestureRecognizer view]])
    {
        result = YES;
    }
    return result;
}

-(void)panGesture:(UIPanGestureRecognizer*)sender
{
    //some logic to see if we will handle the gesture in this method or pass gesture on to the MKMapView

    return;
}

最佳答案

The standard Apple way to move the annotations is to tap once then quickly tap and hold and drag. The users of the app have complained that it is too difficult to do this.

我不这么认为…… 🙁

我要写我的逻辑,实际上使用平移手势甚至苹果提供默认的拖放功能都是坏事.顺便说一下,如果按照问题中提到的方式进行操作,则必须为地图上显示的每个注释添加单独的平移手势.添加它自己的标签并为所有人保留相同的手势方法名称,这样您就可以通过标签轻松管理它.因此,当最终用户点击/触摸任何注释时,它的方法将被调用,您可以通过它自己的标记触摸/点击注释.只为拖放注释编写代码.不确定,但可能会解决您的问题.

点赞