gpt4 book ai didi

iPhone:将 MKMapView 与另一个 UITapGestureRecognizer 相结合

转载 作者:行者123 更新时间:2023-12-03 20:45:50 27 4
gpt4 key购买 nike

除了 MKMapView 已使用的手势识别器之外,我还尝试实现自己的手势识别器。现在我可以点击 map 并设置图钉。这种行为是由我的 UITapGestureRecognizer 实现的。当我点击已经存在的引脚时,我的手势识别器不执行任何操作,而是显示该引脚的标注气泡。 UIGestureRecognizerDelegate 看起来像这样:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if (gestureRecognizer == self.tapRecognizer)
{
bool hitAnnotation = false;
int count = [self.mapView.annotations count];
int counter = 0;

while (counter < count && hitAnnotation == false )
{
if (touch.view == [self.mapView viewForAnnotation:[self.mapView.annotations objectAtIndex:counter]])
{
hitAnnotation = true;
}
counter++;
}
if (hitAnnotation)
{
return NO;
}

}
return YES;
}

这很好用。我唯一的问题是引脚和双击的标注气泡。通常双击用于放大。这仍然有效,但除此之外,我还获得了一个新的图钉。有什么办法可以避免这种情况吗?

另一个问题发生在图钉的标注气泡上。我可以通过点击图钉来打开气泡,而无需在此位置设置新图钉(请参见上面的代码),但是当我想通过点击图钉来关闭气泡时,会设置另一个图钉。我的问题是,如果用户点击标注气泡,我无法检查 touch.view ,因为据我所知,它不是常规的 UIView 。对于这个问题有什么想法或解决方法吗?

谢谢

最佳答案

我遇到了与您的第一个问题相同的问题:区分 MKMapView 中的双击和单击。我所做的如下:

[doubleTapper release];
doubleTapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(mapDoubleTapped:)];
doubleTapper.numberOfTapsRequired = 2;
doubleTapper.delaysTouchesBegan = NO;
doubleTapper.delaysTouchesEnded = NO;
doubleTapper.cancelsTouchesInView = NO;
doubleTapper.delegate = self;

[mapTapper release];
mapTapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(mapTapped:)];
mapTapper.numberOfTapsRequired = 1;
mapTapper.delaysTouchesBegan = NO;
mapTapper.delaysTouchesEnded = NO;
mapTapper.cancelsTouchesInView = NO;
[mapTapper requireGestureRecognizerToFail:doubleTapper];

然后实现以下委托(delegate)方法:

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

使用 requireGestureRecognizerToFail: 允许应用区分单击和双击,并实现 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 确保双击仍转发到 MKMapView 以便它继续正常缩放。请注意,doubleTapper 实际上并没有执行任何操作(在我的例子中,除了记录调试消息)。它只是一个虚拟的 UIGestureRecognizer,用于帮助区分单击和双击。

关于iPhone:将 MKMapView 与另一个 UITapGestureRecognizer 相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7014107/

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