2013-12-13 12 views
8

Ich versuche, ein animiertes GIF in einem Overlay für MKMapView anzuzeigen. Das Overlay wird mit der MKOverlayRenderer erstellt. Um das gif in iOS 7 zu animieren, verwende ich die UIImage+animatedGIF Kategorie, die auf GitHub here gepostet wird.Animierte GIF funktioniert nicht in MKMapView-Overlay mit MKOverlayRenderer

Das Bild des animierten Gifs wird im Overlay mit der Kategorie angezeigt. Das Animationsobjekt wird jedoch nicht animiert. Ich habe kein Problem mit der Kategorie, um ein gif in einem UIImageView zu animieren, aber es scheint nicht richtig in einem Kartenansicht-Overlay zu funktionieren.

Wie kann ich diese Kategorie verwenden, um ein animiertes GIF in einem Kartenansichts-Overlay zu platzieren?

oder ...

Gibt es eine Möglichkeit, eine UIImageView im Overlay zu platzieren, die mein Problem lösen könnte, indem die UIImageView mit dem animierten GIF-Einstellung?

Meine Overlay Renderer Unterklasse ist die folgende:

MapOverlayRenderer.h

#import <MapKit/MapKit.h> 

@interface MapOverlayRenderer : MKOverlayRenderer 
- (instancetype)initWithOverlay:(id<MKOverlay>)overlay overlayImage:(UIImage *)overlayImage; 
@end 

MapOverlayRenderer.m

#import "MapOverlayRenderer.h" 

@interface MapOverlayRenderer() 
@property (strong,nonatomic) UIImage *image; 
@end 

@implementation MapOverlayRenderer 

- (instancetype)initWithOverlay:(id<MKOverlay>)overlay overlayImage:(UIImage *)overlayImage { 

    self = [super initWithOverlay:overlay]; 

    if (self) { 
     _image = overlayImage; 
    } 

    return self; 
} 

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context { 

    CGImageRef imageReference = self.image.CGImage; 

    MKMapRect theMapRect = [self.overlay boundingMapRect]; 
    CGRect theRect = [self rectForMapRect:theMapRect]; 

    CGContextScaleCTM(context, 1.0, -1.0); 
    CGContextTranslateCTM(context, 0.0, -theRect.size.height); 

    CGContextDrawImage(context, theRect, imageReference);  
} 

@end 

In meinem UIViewController, ich bin das animierte Gif holen und das Hinzufügen der Overlay durch Aufrufen einer Methode, die den folgenden Code enthält:

NSURLSession *session = [NSURLSession sharedSession]; 

    [[session dataTaskWithURL:[NSURL URLWithString:radarUrl] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 

     self.radarImage = [UIImage animatedImageWithAnimatedGIFData:data]; //for animated radar image 

     dispatch_async(dispatch_get_main_queue(), ^{ 

      [self.mapView addOverlay:self.polygon]; 

     }); 

    }] resume]; 

Vorschläge zur Animation eines Gifs in einem iOS 7-Kartenansicht-Overlay werden sehr geschätzt.

+1

ich so etwas auf MapView zum Rendern von Wetterdaten getan haben Sie möchten, dass nur wollen Sie? Wenn ja, dann mich wissen lassen, werde ich erklären, Sie im Detail. –

+0

@iosRider Ja, bitte ausführlicher erklären oder als Antwort einreichen. – wigging

Antwort

1

Da ein Kartenansicht-Overlay Ihre Zeichnung in einer CGContext hat, wird es nicht animiert - das ist ein Puffer, der zum Anzeigen von Inhalten gezeichnet und übersetzt wird, im Gegensatz zu einem normalen Teil der Ansichtshierarchie. Leider müssen Sie -setNeedsDisplayInMapRect:zoomScale: wiederholt verwenden, um Animationen anzufordern. Dieses System ist etwas weniger flexibel als iOS 6 und früher, wodurch normale Ansichten auf der Karte hinzugefügt wurden.

+0

Wie verwende ich 'setNeedsDisplayInMapRect' für das animierte GIF? – wigging

+1

Wenn auf diese Weise ... Ich denke, Sie sollten wahrscheinlich einen Timer einrichten und dieses 'setNeedsDisplayInMapRect' jedes Intervall aufrufen? und stellen Sie sicher, dass jedes Mal ein neues Bild in Ihrer "drawMapRect" gezeichnet wird. – wdanxna

+1

@wdanxna Also sagst du, um den Timer zu verwenden, um jedes Bild des Gifs anzuzeigen? Können Sie uns eine ausführlichere Erklärung geben? – wigging

3

https://github.com/jhurray/iOS7AnimatedMapOverlay

dies ist der beste Weg, Overlays in iOS7 animieren

+0

Link nur Antworten werden abgeraten, können Sie Sommer machen? –

+0

Ermöglicht dies animierte Gifs im Overlay anzuzeigen und zu animieren? – wigging

+1

Entschuldigung. Was Sie tun müssen, um über eine Karte in iOS7 richtig zu animieren, ist das Hinzufügen einer animierenden Ansicht zu Ihrer MKMapView. Sie können keine Unteransichten mehr zu Überlagerungen hinzufügen. Das bedeutet auch, dass Sie mapViewRegionWill/DidChange jedes Mal entfernen und an der entsprechenden Stelle hinzufügen müssen. Die entsprechenden Berechnungen finden Sie im oben verlinkten github-Projekt. – jhurray