Animer un sprite sur un MKMapView

voix
2

Sans entrer dans OpenGL (Quartz 2D est OK):

  1. Disons que j'ai une image que je veux déplacer sur une carte d'une certaine façon fluide. Par exemple, une image d'un avion « voler » à travers la carte. Je suis en mesure de le faire en utilisant un MKAnnotation, un NSTimer et jongler avec le taux de changement latitude / longitude et le taux de minuterie. Cependant, je suppose que ce n'est pas idéal, même si les résultats semblent assez décent. Pouvez-vous penser à une meilleure façon?

  2. Maintenant , disons que je veux que cette image animée (pensez: GIF animé). Je ne peux pas faire l'habitude UIImageViewavec une série de animationFramescar tout ce que j'ai accès à l'MKAnnotationView est UIImage. Comment qualifieriez - vous les gars face à ce?

Je me rends compte que # 2 pourrait être manipulé avec une UIImageView au-dessus de la carte contenant les animationImages. Cependant, je dois gérer manuellement traduire le mouvement de l'avion ou fusée ou tout comme la région du MapView a changé, en fonction des mouvements des utilisateurs dans le monde réel, ou un zoom utilisateur (défilement n'est pas autorisé dans mon application).

Qu'est-ce que tu penses?

Créé 20/08/2009 à 04:06
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
5

Je pense que je l'ai trouvé une solution à # 2. Je MKAnnotationView et écrit sous-classé code pour ajouter un UIImageView (avec des images d'animation) en tant que sous-vue.

//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
Créé 20/08/2009 à 05:42
source utilisateur

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