我已成功更改MKAnnotationView以使用我的自定义图像以及以下代码段。但是,我的问题是,一旦我使用
启用默认引脚动画 annotationView.animatesDrop = YES;
自定义图像消失,使用默认红色图钉。有没有什么办法解决这一问题? 感谢
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(MyAnnotation *)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
// try to dequeue an existing pin view first
static NSString* identifier = @"AnnotationIdentifier";
MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
//!!!!!!!annotationView.animatesDrop = YES;!!!!!!!!!!
} else {
annotationView.annotation = annotation;
}
annotationView.image = [UIImage imageNamed:@"bla.png"];
return annotationView;
}
答案 0 :(得分:4)
尝试这样的smth:
- (void)loadView {
self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view.backgroundColor = [UIColor grayColor];
[self.view setClipsToBounds:YES];
MKMapView *mapView = [[MKMapView alloc] initWithFrame:CGRectMake(10, 10, self.view.frame.size.width - 20, self.view.frame.size.height - 20)];
mapView.delegate = self;
[mapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
mapView.mapType = MKMapTypeStandard;
[self.view addSubview:mapView];
}
#pragma mark - MKMapView Delegate Implementation
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
for (MKAnnotationView *pin in views) {
//UIButton *detailsButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
//[detailsButton addTarget:self action:@selector(detailsButtonAct:) forControlEvents:UIControlEventTouchUpInside];
pin.canShowCallout = YES;
//pin.rightCalloutAccessoryView = detailsButton;
CGRect endFrame = pin.frame;
pin.frame = CGRectOffset(pin.frame, 0, -230);
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.45f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
pin.frame = endFrame;
[UIView commitAnimations];
}
}
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation {
static NSString *AnnotationViewID = @"annotationViewID";
MKAnnotationView *annotationView = (MKAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
if (annotationView == nil)
annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
annotationView.image = [UIImage imageNamed:@"map_pin.png"];
annotationView.annotation = annotation;
[annotationView addObserver:self forKeyPath:@"selected" options:NSKeyValueObservingOptionNew context:@"pinSelected"];
[annotationView setEnabled:YES];
return annotationView;
}
答案 1 :(得分:1)
如果有人想要以块为基础的方式而不是开始/提交方式(从IOS 4开始推荐):
...
[UIView animateWithDuration:0.5f
delay:0
options:UIViewAnimationOptionCurveLinear
animations:^{
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
pin.frame = endFrame;
}
completion:^(BOOL finished){
if (finished) {
// Do some action upon completion of animation
}
}];
感谢答案恶魔,非常有帮助