我使用UIView动画为我的mapView框架设置动画:
[UIView animateWithDuration:0.25f animations:^{ self.mapView.frame = frame; } completion:nil]; }
在使用上面的内容扩展mapView时,我看到mapView正在添加错误的注释,直到动画结束.动画完成后,放错位置的注释会消失.
展开地图时,调用如下:
> animateWithDuration开始
> mapView:regionWillChangeAnimated
> mapView:didAddAnnotationViews
> mapView:regionDidChangeAnimated
> animateWithDuration完成
我最小化地图时没问题可能是因为没有调用mapView:didAddAnnotationViews.
我可以在动画时以某种方式禁用mapviews regionWillChange吗?
动画前:
动画中途.看到很多错失的注释.
动画完成了.所有错失的注释都消失了.
解决方法
作为临时解决方案,我建议您做以下事情:
1.在更改框架之前,使用mapView的screenShot创建UIImageView
2.将imageView作为subView添加到父视图并隐藏mapView.
3.动画两个:imageView和mapView,改变它的帧.
4.在完成动画块中取消隐藏mapView并删除imageView.
1.在更改框架之前,使用mapView的screenShot创建UIImageView
2.将imageView作为subView添加到父视图并隐藏mapView.
3.动画两个:imageView和mapView,改变它的帧.
4.在完成动画块中取消隐藏mapView并删除imageView.
像这样的东西:
- (UIImage *)imageFromView:(UIView *) view { if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { UIGraphicsBeginImageContextWithOptions(view.frame.size,NO,[[UIScreen mainScreen] scale]); } else { UIGraphicsBeginImageContext(view.frame.size); } [view.layer renderInContext: UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } - (void)foo { UIImageView *mapScreenShotView = [[UIImageView alloc] initWithImage:[self imageFromView:self.mapView]]; mapScreenShotView.frame = self.mapView.frame; [self.mapView.superview addSubview:mapScreenShotView]; self.mapView.hidden = YES; CGRect frame = self.mapView.frame; frame.origin = ... frame.size = ... // here no more need to animate mapView,because currently its hidden. So we will change it's frame in outside of animation block. self.mapView.frame = frame; [UIView animateWithDuration:0.25f animations:^{ mapScreenShotView.frame = frame; } completion:^{ self.mapView.hidden = NO; [mapScreenShotView removeFromSuperview]; }]; }
使用此临时解决方案,直到找到解决该问题的正确方法.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。