gpt4 book ai didi

ios - 自定义双击放大 MKMapView (Uber like)

转载 作者:行者123 更新时间:2023-12-01 17:53:38 25 4
gpt4 key购买 nike

双击 MKMapView 时,我试图达到与 Uber 应用程序相同的效果。

它不会放大用户点击的点,而是放大 map 的当前中心。

这是我迄今为止尝试过的:

  • 删除原来的双击手势识别器
  • 添加我自己的手势识别器来处理自己的缩放

  • 但是,即使删除原来的双击手势识别器似乎有效,我的新手势识别器选择器也不会被触发。
    - (void)viewDidLoad
    {
    [self removeDefaultDoubleTapToZoomGestureRecognizer];
    [self addCustomDoubleTapToZoomGestureRecognizer];
    }

    - (void)removeDefaultDoubleTapToZoomGestureRecognizer
    {
    [self findAndRemoveDefaultDoubleTapToZoomInView:self.map];
    }

    - (void)findAndRemoveDefaultDoubleTapToZoomInView:(UIView *)view
    {
    NSArray *gestureRecognizers = view.gestureRecognizers;
    for (UIGestureRecognizer *gestureRecognizer in gestureRecognizers)
    {
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]])
    {
    UITapGestureRecognizer *tapGestureRecognizer = (UITapGestureRecognizer *)gestureRecognizer;
    if (tapGestureRecognizer.numberOfTapsRequired == 2 && tapGestureRecognizer.numberOfTouchesRequired == 1)
    {
    [view removeGestureRecognizer:tapGestureRecognizer];
    }
    }
    }

    for (UIView *subView in view.subviews)
    {
    [self findAndRemoveDefaultDoubleTapToZoomInView:subView];
    }
    }

    - (void)addCustomDoubleTapRecognizer
    {
    UIView *view = self.mapView;
    UITapGestureRecognizer *gestureRecognizer = self.customDoubleTapGestureRecognizer;

    [view addGestureRecognizer:gestureRecognizer];
    }

    - (IBAction)customDoubleTapGestureRecognizerTapped:(UITapGestureRecognizer *)sender
    {
    NSLog(@"double tap");
    }
    customDoubleTapGestureRegonizer属性(property)和 -customDoubleTapGestureRecognizerTapped:方法已从 IB 添加。

    任何帮助将不胜感激。

    最佳答案

    我正在做一些与你非常相似的事情,它对我有用。如果可能,我会从 IB 中删除双击识别器逻辑,而是从您的 addCustomDoubleTapRecognizer 手动添加它。像这样的实现

    - (void)addCustomDoubleTapRecognizer {
    UIView *view = self.mapView;

    UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomInGesture)];
    [view addGestureRecognizer:gestureRecognizer];
    gestureRecognizer.numberOfTapsRequired = 2;
    }

    然后添加 zoomInGesture像这样的方法
    - (void)zoomInGesture {
    MKCoordinateRegion region = self.mapView.region;
    MKCoordinateSpan span = self.mapView.region.span;
    span.latitudeDelta *= 0.5;
    span.longitudeDelta *= 0.5;
    region.span = span;
    [self.mapView setRegion:region animated:YES];
    }

    它对我有用,当用户双击 map 上的任意位置时,它会放大当前的 map 中心。

    关于ios - 自定义双击放大 MKMapView (Uber like),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22364791/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com