使用MKOverlayRenderer在MKMapView覆盖中不起作用的动画gif

wig*_*ing 8 objective-c uiimageview mapkit mkoverlay ios7

我试图在叠加中显示动画gif MKMapView.使用MKOverlayRenderer.创建叠加层.动画中的iOS 7的GIF,我使用的是UIImage+animatedGIF贴类别这里 GitHub上.

使用类别,动画gif的图像在叠加中显示得很好; 但是,gif没有动画.我没有问题使用类别来动画gif中的gif,UIImageView但它似乎无法在地图视图叠加中正常工作.

如何使用此类别将动画gif放置在地图视图叠加层中?

要么...

有没有办法UIImageView在覆盖中放置一个可以通过设置UIImageView动画gif 来解决我的问题?

我的叠加渲染器子类如下:

MapOverlayRenderer.h

#import <MapKit/MapKit.h>

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

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
Run Code Online (Sandbox Code Playgroud)

在我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];
Run Code Online (Sandbox Code Playgroud)

任何有关如何在iOS 7地图视图叠加层中设置gif动画的建议都将非常感激.

inc*_*nus 1

因为地图视图叠加层将您的绘图放在 a 中CGContext,所以它不会动画——这是一个被绘制并转换为视图内容的缓冲区,而不是作为视图层次结构的正常部分。不幸的是,您将需要反复使用-setNeedsDisplayInMapRect:zoomScale:来请求动画。该系统比 iOS 6 及之前的系统灵活性稍差,后者在地图顶部添加了普通视图。