2013-12-13 17 views
8

MKMapViewのオーバーレイにアニメーションgifを表示しようとしています。オーバーレイはMKOverlayRendererを使用して作成されます。 iOS 7でgifをアニメーション化するには、UIImage+animatedGIFカテゴリを使用しています。hereはGitHubに投稿されています。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私UIViewController

#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 

、私はアニメーション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

でオーバーレイをアニメーション化するための最良の方法ですあなたの詳細。 –

+0

@iosRiderはい、もっと詳しく説明するか、回答として送信してください。 – wigging

答えて

1

CGContextにマップビューのオーバーレイが描画されているため、ビュー階層の通常の部分ではなく、描画されてコンテンツを表示するバッファになります。残念ながら、-setNeedsDisplayInMapRect:zoomScale:を繰り返し使用してアニメーションをリクエストする必要があります。このシステムは、iOS 6以前と比べてやや柔軟性がなく、マップの上に通常のビューを追加しました。

+0

アニメーションGIFに 'setNeedsDisplayInMapRect'をどうやって使うのですか? – wigging

+1

もしそうなら...あなたはおそらくタイマーをセットアップし、その間に 'setNeedsDisplayInMapRect'を呼び出すべきだと思いますか?新しい画像があなたの 'drawMapRect'に毎回描画されていることを確認してください。 – wdanxna

+1

@wdanxnaタイマーを使ってgifの各フレームを表示すると言っていますか?あなたはこれをより詳細に説明する答えを提出できますか? – wigging

3

https://github.com/jhurray/iOS7AnimatedMapOverlay

これは、私はあなたがその唯一のようにしたいですのMapViewの気象情報をレンダリングするためにそのようなことを行っているか?yesその後、私が説明します知っている場合はiOS7

+0

リンクのみの回答は推奨されません。 –

+0

アニメーションGIFをオーバーレイで表示およびアニメーション表示できますか? – wigging

+1

申し訳ありません。 iOS7のマップ上で適切にアニメートするために必要な作業は、MKMapViewにアニメーション表示を追加することです。オーバーレイにサブビューを追加することはできません。これは、mapViewRegionWill/DidChangeを削除して適切な場所に追加するたびに実行されることを意味します。適切な計算は上記のリンクされたgithubプロジェクトにあります。 – jhurray

関連する問題