#pragma mark - MKMapViewDelegate
-(MKAnnotationView*)mapView:(MKMapView*)mapView viewForAnnotation:(id)annotation
{
NSString*identifer =@"SMAnonotationView";
SMAnonotationView*anonotationView = (SMAnonotationView*)[mapViewviewForAnnotation:annotation];
if(!anonotationView) {
anonotationView = [[SMAnonotationViewalloc]initWithAnnotation:annotationreuseIdentifier:identifer];
anonotationView.model=self.anonotionModel;
anonotationView.delegate=self;
}
anonotationView.delegateView=self;
returnanonotationView;
}
换上自定义大头针后,发现其frame为0,无法点击,之后思路
1.加frame,但位置不对达不到预期效果
2.-(void)mapView:(MKMapView*)mapView didSelectAnnotationView:(MKAnnotationView*)view
{
DebugLog(@"didSelectAnnotationView");
}
这个方法在系统大头针会调用,而且一旦点击将被选择,有坑,躲开
3.- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
UIView*fitView = [superhitTest:pointwithEvent:event];
//转换坐标系
CGPointnewPoint = [self.anonotationViewconvertPoint:pointfromView:self];
//判断触摸点是否在view上
if(CGRectContainsPoint(self.anonotationView.bounds, newPoint)) {
fitView =self.anonotationView;
returnfitView;
}
returnnil;
}
此为正确方法,获取超出super view的点击事件。
网友评论