Animarea un sprite peste un MKMapView

voturi
2

Fără a intra în OpenGL (Quartz 2D este OK):

  1. Să presupunem că am o imagine pe care doresc să se mute într-o hartă într-un fel de fluid. De exemplu, o imagine a unui avion „zboară“ pe hartă. Am fost în stare să facă acest lucru, folosind un MKAnnotation, un NSTimer și se ține de fleacuri cu rata de schimbare de latitudine / longitudine și rata cronometru. Cu toate acestea, presupun acest lucru nu este ideal, deși rezultatele arata destul de decente. Te poți gândi la un mod mai bun?

  2. Să presupunem că vreau această imagine să fie animată (cred: GIF animat). Nu pot face de obicei UIImageViewcu o serie de animationFramesdeoarece tot ce am acces la MKAnnotationView este UIImage. Cum ar aborda voi asta?

Îmi dau seama că # 2 ar putea fi tratate cu un UIImageView pe partea de sus a hărții care conține animationImages. Cu toate acestea, atunci ar trebui să se ocupe manual traducerea mișcarea avionului sau a rachetei sau orice altceva ca regiune a mapview schimbat, în funcție de mișcările utilizatorilor din lumea reală, sau utilizatorul zoom (derulare nu este permisă în aplicația mea).

Tu ce crezi?

Întrebat 20/08/2009 la 04:06
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
5

Cred că am găsit o soluție la # 2. Am subclasată MKAnnotationView și a scris un cod pentru a adăuga un UIImageView (cu imagini de animație) ca 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
Publicat 20/08/2009 la 05:42
sursa de către utilizator

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