fuz*_*oat 14 iphone cocoa-touch objective-c
我已经设置了一个从符合MKAnnotation协议的类派生的NSMutableArray对象.我为注释设置了设置标题和副标题,并使用以下方法成功将它们添加到MKMapView:
[[self customMapView] addAnnotations:locationArray];
Run Code Online (Sandbox Code Playgroud)
我现在要做的是动画引脚掉落,最初我以为我可以用Option1做到这一点,使用这一切都可行,但引脚不做动画下降.
// Option1
// WORKS FOR: pinColor YES, animatesDrop NO, LABEL YES
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
for(MKPinAnnotationView *eachView in views) {
[eachView setAnimatesDrop:YES];
[eachView setPinColor:MKPinAnnotationColorPurple];
}
}
Run Code Online (Sandbox Code Playgroud)
我的下一个猜测是尝试Option2,这似乎工作得很好,但我有两个问题.标题和副标题没有显示,我的自定义注释对象正在传入(我可以在调试器中看到它),但所包含的信息并没有传递给新的pin.其次,这会创建一组新的MKAnnotationViews,旧版本会发生什么,是否存在内存泄漏问题?
// Option2
//FOR: pinColor YES, animatesDrop YES, LABEL NO
- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id<MKAnnotation>) annotation {
MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier: @"annotation_ID"];
if (pin == nil) {
pin = [[[MKPinAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: @"annotation_ID"] autorelease];
} else {
pin.annotation = annotation;
}
pin.pinColor = MKPinAnnotationColorRed;
pin.animatesDrop = YES;
return pin;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我通过添加解决了缺少的标题和subTitle pin.canShowCallout = YES;
小智 32
MKPinAnnotationView是MKAnnotationView的子类.
MKAnnotationView是一个通用的注释视图,如果需要,您必须提供图像和动画.
MKPinAnnotationView是MKAnnotationView的一个方便的子类,它自动提供所选颜色的图像和放在地图上的图钉动画.在viewForAnnotation中创建视图时设置animatesDrop属性,它将从那里自动处理动画.
如果未实现viewForAnnotation,则会显示没有动画的标准红色图钉.
当调用didAddAnnotationViews时,自动动画已经发生并且设置该属性没有任何效果.
但是,如果要创建与MKPinAnnotationView提供的默认投影动画不同的自定义动画,则可以在didAddAnnotationViews中执行此操作.视图已经位于其最终目标点,因此您将其保存,然后将其从不同的点设置为该目标的动画.
如果您对MKPinAnnotationView提供的默认投影动画感到满意,则无需实现didAddAnnotationViews.当所有注释视图实际到位时,该委托方法对于执行您可能需要执行的其他操作更有用.
要使您的别针显示标题,请设置canShowCallout为YES您设置的位置animatesDrop.
不确定你的意思是"这会创建一组新的MKAnnotationViews".在viewForAnnotation方法中,您将为MKAnnotation对象提供视图(MKPinAnnotationView).它们不是同一件事.
此外,viewForAnnotation方法的工作方式类似于UITableView的cellForRowAtIndexPath方法,其中注释视图可以被回收,这就是为什么每次在视图中设置特定于MKAnnotation的信息(例如注释属性)很重要.
mrt*_*mrt 11
这是我能找到的最简单的解决方案.它的作用是在viewDidLoad事件中删除UIMapView上的单个引脚.
该项目引用了MapKit框架
该视图具有以下导入:#import <MapKit/MapKit.h>
视图控制器实现MKMapViewDelegate协议
视图控制器实现包含:
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id ) annotation
{
MKPinAnnotationView *newAnnotation = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"annotation1"];
newAnnotation.pinColor = MKPinAnnotationColorGreen;
newAnnotation.animatesDrop = YES;
newAnnotation.canShowCallout = NO;
[newAnnotation setSelected:YES animated:YES];
return newAnnotation;
}
Run Code Online (Sandbox Code Playgroud)
CLLocationCoordinate2D geos = CLLocationCoordinate2DMake(0.2344, 45.324);
MKPlacemark* marker = [[MKPlacemark alloc] initWithCoordinate:geos addressDictionary:nil];
[mapView addAnnotation:marker];
[marker release];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18928 次 |
| 最近记录: |