Εμψύχωση ένα ξωτικό σε ένα MKMapView

ψήφοι
2

Χωρίς να εμπλακούμε σε OpenGL (Quartz 2D είναι ΟΚ):

  1. Ας πούμε ότι έχω μια εικόνα που θέλω να προχωρήσουμε σε ένα χάρτη με κάποιο υγρό τρόπο. Για παράδειγμα, μια εικόνα από ένα αεροπλάνο «πετούν» πάνω στο χάρτη. Ήμουν σε θέση να το κάνετε αυτό χρησιμοποιώντας μια MKAnnotation, μια NSTimer και κόλπα με το ποσοστό των lat αλλαγής / lon και το ποσοστό χρονόμετρο. Ωστόσο, υποθέτω ότι αυτό δεν είναι το ιδανικό, αν και τα αποτελέσματα φαίνονται αρκετά αξιοπρεπή. Μπορείτε να σκεφτώ καλύτερο τρόπο;

  2. Τώρα ας πούμε ότι θέλω αυτή η εικόνα να είναι κινούμενες (σκεφτείτε: κινούμενα gif). Δεν μπορώ να κάνω τη συνηθισμένη UIImageViewμε μια σειρά animationFrames, γιατί το μόνο που έχω πρόσβαση στο MKAnnotationView είναι UIImage. Πώς θα σας παιδιά αντιμετωπίσουμε αυτό;

Αντιλαμβάνομαι ότι # 2 θα μπορούσε να αντιμετωπιστεί με UIImageView πάνω από το χάρτη που περιέχει τα animationImages. Ωστόσο, τότε θα πρέπει να χειριστεί το χέρι μετάφραση την κίνηση του αεροπλάνου ή πύραυλο ή ό, τι η περιοχή του MapView αλλάξει, ανάλογα με τις κινήσεις του χρήστη στον πραγματικό κόσμο, ή ο χρήστης ζουμ (κύλιση δεν επιτρέπεται στην εφαρμογή μου).

Τι νομίζετε;

Δημοσιεύθηκε 20/08/2009 στις 04:06
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
5

Νομίζω ότι έχω βρει μια λύση στο # 2. Θα subclassed MKAnnotationView και έγραψε κάποια κώδικα για να προσθέσετε ένα UIImageView (με εικόνες animation) ως δευτερεύουσας προβολής.

//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