gpt4 book ai didi

iphone - 在 MKMapView 上对 Sprite 进行动画处理

转载 作者:行者123 更新时间:2023-12-03 20:38:17 25 4
gpt4 key购买 nike

无需进入 OpenGL(Quartz 2D 即可):

  1. 假设我有一张图像,我想以某种流畅的方式在 map 上移动。例如,飞机“飞过” map 的图像。我已经能够使用 MKAnnotation、NSTimer 并调整纬度/经度变化率和计时器速率来做到这一点。然而,我认为这并不理想,尽管结果看起来相当不错。你能想出更好的办法吗?

  2. 现在假设我希望该图像具有动画效果(例如:动画 gif)。我无法使用一系列 animationFrames 执行通常的 UIImageView 操作,因为我在 MKAnnotationView 中可以访问的只是一个 UIImage。你们会如何解决这个问题?

我意识到#2 可以通过包含动画图像的 map 顶部的 UIImageView 来处理。但是,然后我必须手动处理翻译飞机或火箭或其他 map View 区域发生变化的移动,具体取决于现实世界中的用户移动或用户缩放(我的应用程序中不允许滚动)。

你觉得怎么样?

最佳答案

我想我已经找到了#2 的解决方案。我对 MKAnnotationView 进行了子类化,并编写了一些代码来添加 UIImageView(带有动画图像)作为 subview 。

//AnimatedAnnotation.h

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface AnimatedAnnotation : MKAnnotationView
{
UIImageView* _imageView;
NSString *imageName;
NSString *imageExtension;
int imageCount;
float animationDuration;
}

@property (nonatomic, retain) UIImageView* imageView;
@property (nonatomic, retain) NSString* imageName;
@property (nonatomic, retain) NSString* imageExtension;
@property (nonatomic) int imageCount;
@property (nonatomic) float animationDuration;


- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier imageName:(NSString *)name imageExtension:(NSString *)extension imageCount:(int)count animationDuration:(float)duration
;

@end

//AnimatedAnnotation.m

#import "AnimatedAnnotation.h"

@implementation AnimatedAnnotation
@synthesize imageView = _imageView;
@synthesize imageName, imageCount, imageExtension,animationDuration;

- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier imageName:(NSString *)name imageExtension:(NSString *)extension imageCount:(int)count animationDuration:(float)duration
{
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
self.imageCount = count;
self.imageName = name;
self.imageExtension = extension;
self.animationDuration = duration;
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@0.%@",name,extension]];
self.frame = CGRectMake(0, 0, image.size.width, image.size.height);
self.backgroundColor = [UIColor clearColor];


_imageView = [[UIImageView alloc] initWithFrame:self.frame];
NSMutableArray *images = [[NSMutableArray alloc] init];
for(int i = 0; i < count; i++ ){
[images addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%@%d.%@", name, i, extension]]];
}


_imageView.animationDuration = duration;
_imageView.animationImages = images;
_imageView.animationRepeatCount = 0;
[_imageView startAnimating];

[self addSubview:_imageView];

return self;
}

-(void) dealloc
{
[_imageView release];
[super dealloc];
}


@end

关于iphone - 在 MKMapView 上对 Sprite 进行动画处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1303736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com