Animieren eines Sprites über einen MKMapView

stimmen
2

Ohne in OpenGL (Quartz 2D ist OK):

  1. Lassen Sie uns sagen, dass ich ein Bild, das ich möchte über eine Karte in etwas Flüssigkeit Art und Weise bewegen. Zum Beispiel kann ein Bild einer Ebene „Fliege“ über die Karte. Ich habe in der Lage gewesen, dies mit einem MKAnnotation zu tun, eine NSTimer und mit einer Geschwindigkeit von lat / lon Änderung und Timer Rate Hantieren. Aber ich nehme an, dies ist nicht ideal, obwohl die Ergebnisse recht gut aussehen. Können Sie sich einen besseren Weg denken?

  2. Lassen Sie uns jetzt sagen , dass ich dieses Bild wollen animiert werden (man denke: animated gif). Ich kann die übliche nicht UIImageViewmit einer Reihe von , animationFramesweil alles , was ich habe Zugriff auf in MKAnnotationView ist UIImage. Wie würden ihr diese angehen?

Ich stelle fest, dass 2 # mit einem UIImageView oben auf der Karte um die animationImages enthalten behandelt werden könnten. Aber dann würde ich manuell übersetzte die Bewegung des Flugzeugs oder Rakete zu behandeln oder was auch immer als der Bereich des mapview verändert, je nach Benutzerbewegungen in der realen Welt oder Benutzer Zoomen (Scrollen nicht in meiner app erlaubt ist).

Was denken Sie?

Veröffentlicht am 20/08/2009 um 04:06
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
5

Ich glaube, ich habe eine Lösung zu 2 # herausgefunden. Ich subclassed MKAnnotationView und schrieb eine UIImageView (mit Animationsbilder) als Subview einen Code hinzuzufügen.

//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
Beantwortet am 20/08/2009 um 05:42
quelle vom benutzer

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