Анимационный спрайт через MKMapView

голоса
2

Не вдаваясь в OpenGL (Quartz 2D ОК):

  1. Скажем, у меня есть образ, который я хочу, чтобы перемещаться по карте в какой-то жидкости образом. Например, изображение самолета «летающий» по всей карте. Я был в состоянии сделать это с помощью MKAnnotation, в NSTimer и возился со скоростью изменения широты / долготы и скорости таймера. Тем не менее, я полагаю, это не является идеальным, хотя результаты выглядят довольно прилично. Можете ли вы придумать лучший способ?

  2. Теперь давайте предположим , что я хочу , чтобы это изображение анимировать (думаю: анимированный GIF). Я не могу сделать обычный UIImageViewс серией , animationFramesпотому что все у меня есть доступ к в MKAnnotationView является UIImage. Как бы вы , ребята , решать это?

Я понимаю, что # 2 может быть обработан с UIImageView на верхней части карты, содержащей animationImages. Однако, я бы вручную обрабатывать перевод движения самолета или ракеты или независимо от того, как область MapView изменяется, в зависимости от движений пользователя в реальном мире, или пользователь масштабирование (скроллинг не допускаются в моем приложении).

Как вы думаете?

Задан 20/08/2009 в 04:06
источник пользователем
На других языках...                            


1 ответов

голоса
5

Я думаю, что я понял, решение # 2. Я подклассы MKAnnotationView и написал код, чтобы добавить UIImageView (с анимационными изображениями) как подвид.

//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
Ответил 20/08/2009 в 05:42
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more