我正在尝试在MKMapView
的叠加层中显示动画gif。使用MKOverlayRenderer
创建叠加层。要在iOS 7中为gif制作动画,我在GitHub上使用UIImage+animatedGIF
类别here。{/ p>
使用该类别,动画gif的图像在叠加层中显示正常;但是,gif没有动画。我使用该类别在UIImageView
中为gif设置动画没有问题,但它似乎无法在地图视图叠加层中正常工作。
如何使用此类别将动画gif放置在地图视图叠加层中?
...或
有没有办法在叠加层中放置UIImageView
,可以通过设置带动画gif的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设置动画的任何建议都将非常感激。
答案 0 :(得分:3)
https://github.com/jhurray/iOS7AnimatedMapOverlay
这是在iOS7中为叠加层制作动画的最佳方式
答案 1 :(得分:1)
因为地图视图叠加层正在CGContext
中进行绘制,所以它不会设置动画 - 这是一个被绘制并转换为视图内容的缓冲区,而不是正常的部分。查看层次结构很遗憾,您需要反复使用-setNeedsDisplayInMapRect:zoomScale:
来请求动画。这个系统比iOS 6和之前的系统灵活一点,它在地图上添加了普通视图。