Animatie van een sprite over een MKMapView

stemmen
2

Zonder in OpenGL (Quartz 2D is OK):

  1. Laten we zeggen dat ik heb een beeld dat ik wil bewegen over een kaart op wat vocht manier. Bijvoorbeeld een afbeelding van een vliegtuig vliegende over de kaart. Ik ben in staat geweest om dit te doen met behulp van een MKAnnotation, een NSTimer en gehannes met de snelheid van de lat / lon verandering en timer tarief geweest. Maar ik neem aan dat dit is niet ideaal, maar de resultaten zien er heel behoorlijk. Kun je denken aan een betere manier?

  2. Laten we nu eens zeggen dat ik wil dit beeld te worden geanimeerd (denk: animated gif). Ik kan niet de gebruikelijke doen UIImageViewmet een reeks van animationFrames, want alles wat ik heb toegang tot in MKAnnotationView is UIImage. Hoe zouden jullie dit aangepakt?

Ik realiseer me dat # 2 kunnen worden behandeld met een UIImageView op de top van de map van de animationImages. Echter, dan zou ik moeten handmatig verwerken vertalen van de beweging van het vliegtuig of raket of wat dan ook als het gebied van de Mapview veranderd, afhankelijk van de bewegingen van de gebruiker in de echte wereld, of door de gebruiker te zoomen (scrollen is niet toegestaan ​​in mijn app).

Wat denk je?

De vraag is gesteld op 20/08/2009 om 04:06
bron van user
In andere talen...                            


1 antwoorden

stemmen
5

Ik denk dat ik heb bedacht een oplossing voor # 2. Ik subklasse MKAnnotationView en schreef enkele code om een ​​UIImageView (met animatiebeelden) toevoegen als subweergave.

//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
antwoordde op 20/08/2009 om 05:42
bron van user

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