2013-12-13 20 views
8

我試圖在覆蓋圖中爲MKMapView顯示一個動畫gif。覆蓋圖使用MKOverlayRenderer創建。要在iOS 7中爲gif製作動畫,我使用GitHub上發佈的UIImage+animatedGIF類別here使用MKOverlayRenderer在MKMapView覆蓋圖中不起作用的動畫gif

動畫GIF的圖像在覆蓋圖中使用類別顯示得很好;然而,gif不會動畫。我沒有問題使用該類別在UIImageView中爲GIF製作動畫,但它在地圖視圖疊加中似乎不能正確工作。

如何使用此類別在地圖視圖疊加中放置動畫gif?

或...

有沒有辦法來放置在可能通過與gif動畫設置UIImageView解決我的問題疊加一個UIImageView

我的疊加渲染的子類如下:

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 

在我UIViewController,我取的gif動畫和增加覆蓋通過調用包含以下代碼的方法:

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]; 

任何有關如何在iOS 7地圖視圖疊加中動畫gif的建議將不勝感激。

+1

我已經做了類似的東西呈現在MapView的天氣信息,你要喜歡,只有在iOS7動畫疊加的最佳方式嗎?如果是的話讓我知道我會解釋你詳細介紹。 –

+0

@iosRider是的,請詳細解釋或提交作爲答案。 – wigging

回答

1

因爲地圖視圖疊加在CGContext中繪製,所以它不會動畫 - 這是一個緩衝區,它被繪製並轉換爲查看內容,而不是視圖層次結構的正常部分。不幸的是,您需要重複使用-setNeedsDisplayInMapRect:zoomScale:來請求動畫。這個系統比iOS 6和之前的系統稍微靈活一點,它在地圖上添加了正常的視圖。

+0

那麼如何使用'setNeedsDisplayInMapRect'作爲動畫的gif? – wigging

+1

如果這樣......我想你應該設置一個計時器並每隔一段時間調用一次'setNeedsDisplayInMapRect'?並確保每次在「drawMapRect」中繪製一張新圖片。 – wdanxna

+1

@wdanxna那麼你是說使用計時器來顯示GIF的每一幀?你能提交一個更詳細的解釋這個答案嗎? – wigging

3
+0

鏈接只有答案是不鼓勵的,你可以總結一下嗎? –

+0

這是否允許GIF動畫在疊加層中顯示和動畫? – wigging

+1

對不起。你需要做的是在iOS7中對地圖進行適當的動畫處理,爲你的MKMapView添加一個動畫視圖。您無法再將子視圖添加到疊加層。這也意味着,每次mapViewRegionWill/DidChange都必須移除並將其添加到適當的位置。適當的計算在上面的鏈接的github項目中。 – jhurray