大家好,并预先感谢=)
我怀疑与MKMapView和MKAnnotationView有关。我需要在MKMapView上显示带有自定义图像的注释。为此,并按照一些教程和其他stackoverflow答案,我创建了自己的类。 EDAnnotation.h:
@interface EDAnnotation : MKAnnotationView
//@property (nonatomic, strong) UIImageView *imageView;
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier;
@end
EDAnnotation.m:
#import "EDAnnotation.h"
@implementation EDAnnotation
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
if (self != nil) {
CGRect frame = self.frame;
frame.size = CGSizeMake(15.0, 15.0);
self.frame = frame;
self.backgroundColor = [UIColor clearColor];
self.centerOffset = CGPointMake(-5, -5);
}
return self;
}
-(void) drawRect:(CGRect)rect {
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setAlignment:NSTextAlignmentCenter];
[[UIImage imageNamed:@"train4_transparent.png"] drawInRect:CGRectMake(0, 0, 15, 15)];
}
@end
我已经在 map 中添加了一些注释,一切都按预期工作。每当我点击图像时,都会显示一个气泡,显示一些信息。问题是我需要能够检测到其中一个注解的长按手势(除了显示气泡的轻击手势之外)。为此,我尝试将
UILongGestureRecognizer
添加到几乎所有可能的方法中:(EDAnnotation *) [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
检索的“EDAnnotationView”实例。我什至尝试使该实例可拖动,并监听didChangeDragState
调用,以便在触发MKAnnotationViewDragStateStarting
时立即取消它们,但这也没有按预期工作。 基本上我需要的是:
drawRect
的EDAnnotation
方法中指定的图像上)。 drawRect
的EDAnnotation
方法中指定的图像,则预先感谢您的帮助=)
最佳答案
问题还可能是您的gestureRecognizer与mapView中的gestureRecognizers冲突。可能会发生这种情况,因为注解视图是mapView的子视图。要解决此问题,请使用UIGestureRecognizerDelegate。初始化手手势手势时,请将委托属性设置为实现该协议的类,更确切地说,这两个方法是:
#pragma mark GestureRecognizerDelegate
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
return YES;
}
在这两种方法中,只要轻松返回YES,手势响应器就会做出反应。也许来自mapView的其他gestureRecognizer也可以触发其动作,但是不幸的是,无法委托mapView的poseRecognizers。
当我向 map 视图添加longPressureRecognizer时,此解决方法对我有所帮助。我认为它也可以帮助您解决问题。
关于ios - iOS MKAnnotationView LongPressGestureRecognizer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29156586/