- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想将 MKAnnotationView
图钉放在 map 上,并让图钉像 MKUserLocation
动画一样动画(带有圆形波浪的蓝点出现)
如何实现这种类型的动画?我需要采取哪些步骤?
谢谢!
最佳答案
自定义内容的子类 MKAnnotationView。 不要通过重复的 addAnnotation 调用来为其设置动画!这是错误的
你可以像对待任何其他 View 一样对待anotationView..
这里是一些具有图像闪烁动画的代码——这段代码应该可以帮助您入门。
(不是很漂亮,但正是您需要的东西!)
#import "DDViewController.h"
#import <MapKit/MapKit.h>
#import <QuartzCore/QuartzCore.h>
@interface DummyAnnotation : NSObject<MKAnnotation>
@end
@implementation DummyAnnotation
- (CLLocationCoordinate2D)coordinate { return CLLocationCoordinate2DMake(51, 10); }
- (NSString *)title { return @"Dummy"; }
@end
@interface DummyAnnotationView : MKAnnotationView
@end
@implementation DummyAnnotationView
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectZero];
imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
imageView.animationImages = @[[UIImage imageNamed:@"1.gif"],[UIImage imageNamed:@"2.gif"]];
imageView.animationDuration = 5;
[imageView startAnimating];
[self addSubview:imageView];
return self;
}
@end
@interface DDViewController() <MKMapViewDelegate>
@end
@implementation DDViewController
- (MKMapView*)mapView {
return (MKMapView*)self.view;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//init a region
MKCoordinateRegion region = MKCoordinateRegionMake(CLLocationCoordinate2DMake(51.0, 10.0), MKCoordinateSpanMake(2.0, 2.0));
[self.mapView setRegion:region animated:NO];
//add a dumy pin
DummyAnnotation *ann = [[DummyAnnotation alloc] init];
[self.mapView addAnnotation:ann];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
if([annotation isKindOfClass:[DummyAnnotation class]]) {
DummyAnnotationView *view = (id)[mapView dequeueReusableAnnotationViewWithIdentifier:@"animated"];
if(!view)
view =[[DummyAnnotationView alloc ] initWithAnnotation:annotation reuseIdentifier:@"animated"];
view.bounds = CGRectMake(0, 0, 59, 59);
view.backgroundColor = [UIColor purpleColor];
//
//Animate it like any UIView!
//
CABasicAnimation *theAnimation;
//within the animation we will adjust the "opacity"
//value of the layer
theAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"];
//animation lasts 0.4 seconds
theAnimation.duration=0.4;
//and it repeats forever
theAnimation.repeatCount= HUGE_VALF;
//we want a reverse animation
theAnimation.autoreverses=YES;
//justify the opacity as you like (1=fully visible, 0=unvisible)
theAnimation.fromValue=[NSNumber numberWithFloat:1.0];
theAnimation.toValue=[NSNumber numberWithFloat:0.1];
//Assign the animation to your UIImage layer and the
//animation will start immediately
[view.layer addAnimation:theAnimation forKey:@"animateOpacity"];
return view;
}
return nil;
}
//---
@end
将工作示例上传到我的保管箱(它最终会消失,但上面的代码除了图像资源和 iOS 应用程序的默认样板代码之外都是其他代码)::https://dl.dropbox.com/u/3753090/test.zip
关于iphone - iOS 自定义 MKAnnotation 对象类似 MKUserLocation 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14916974/
我想计算用户和所有注释之间的距离。 我的注释来自一个经过解析的 csv 文件。我的注释位于 Location 类中。除了距离计算,一切正常。 为了计算距离,我找到了这段代码: -(void)mapVi
可以使用 MKUserLocation 将标题和副标题添加到 iOS 显示的用户位置.当用户点击该位置时,这些将显示在该位置上方的气泡中。可以通过从 MKAnnotationView 选择带有 set
我为用户位置创建了一个自定义 MKAnnotationView: - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotatio
我想在 MKMapView 显示后立即以编程方式选择当前用户位置的 MKUserLocation。 我已经尝试过这样做: func mapView(mapView: MKMapView, didAdd
我希望在 MKMapView 上创建一个“长按”针落点。 目前,一切都按照我想要的方式进行,当您点击并按住 map 时,它会注册手势并且代码会放置一个图钉。 -(void)viewDidLoad {
我正在尝试为 map 上的注释创建自定义注释 View 。我通过调整协议(protocol) MKMapViewDelegate 并覆盖函数 mapView:viewForAnnotation: 来做
我有一个导航 Controller ,其中 VC1 将 VC2 推送到导航堆栈。 VC2 在基于选项卡的 View 中有一个 MKMapView,并打开了用户位置。当我使用 Heapshot 分析工具
iOS 10 中的 map 应用现在在 MKUserLocation MKAnnotationView 顶部包含一个前进方向箭头。有什么方法可以将它添加到我自己的应用程序中的 MKMapView 吗?
我有一个 MKMap 和一系列 MKAnnotations,所有这些都是红色的,这很好。我在 IB 中选择了“显示用户位置”并将 MKAnnotation 从红色更改为蓝色,我的 viewForAnn
我有一个 MapView 显示一些带有 displayPriority = .defaultHight 的注释以允许自动聚类。 MapView 还显示当前用户位置,默认显示优先级为required。
我正在使用 MKMapView,并且已启用对当前位置的跟踪。 mapView.showsUserLocation = true mapView.setUserTrackingMode(.FollowW
我通过子类化 MKAnnotationView 创建了一个自定义注释 View 。此类还创建了一个自定义标注(信息弹出“气泡”) View ,其外观与我的应用相匹配。 我还希望能够为用户位置点重新设置
我的 iOS 应用程序中有一张法线 map ,其中启用了“显示用户位置”——这意味着我在 map 上有我的法线蓝点,显示我的位置和精度信息。标注在代码中被禁用。 但我也有自定义的 MKAnnotati
我需要一种将 MKUserLocation 转换为 CLLocation 的方法,以便我可以在 swift 中使用 distanceFromLocation 方法找到用户位置与另一个预定义 CLLoc
我的应用程序中有一个显示用户位置的 map View 。当点击用户的位置时,图像显示如下: 有没有办法根据我的喜好定制这张图片,例如我想显示用户在他自己的个人资料中的照片,或者我想添加的任何其他静态图
我的应用程序中有一个MapView。 Showuserlocation已激活。 我添加了GestureRecognizer以便长按。 一切正常。 通过缺点,当我触摸用户的注释(蓝色圆圈)时,手势事件未
我最近将我的 map 从 Mapkit 切换到了 Google map 。但是我正在尝试将用户位置坐标更新为 firebase。相当于 MKUserLocation 的 google 是什么 func
mapView:viewForAnnotation: 方法有一个名为 annotation (MKUserLocation) 的参数。在我的应用程序中,我想将此 annotation 类型转换为 MK
我有一个名为 Device 的自定义类,它实现了 MKAnnotation 协议(protocol)。在我关注的示例中(来自 O'Reilly Media 的 iPad 上的 MapKit 和核心位置
我想将 MKAnnotationView 图钉放在 map 上,并让图钉像 MKUserLocation 动画一样动画(带有圆形波浪的蓝点出现) 如何实现这种类型的动画?我需要采取哪些步骤? 谢谢!
我是一名优秀的程序员,十分优秀!