gpt4 book ai didi

ios - 在为其框架设置动画时禁用向 mapView 添加注释

转载 作者:可可西里 更新时间:2023-11-01 04:43:59 25 4
gpt4 key购买 nike

我正在使用 UIView 动画为 mapView 的框架设置动画:

     [UIView animateWithDuration:0.25f animations:^{
self.mapView.frame = frame;
} completion:nil];
}

在使用上面的内容扩展 mapView 时,我看到 mapView 正在添加错位的注释,直到动画结束。动画结束后,错位的注释就会消失。

展开 map 时的调用如下:

  1. animateWithDuration 开始
  2. mapView:regionWillChangeAnimated
  3. mapView:didAddAnnotationViews
  4. map View :regionDidChangeAnimated
  5. animateWithDuration 完成

当我最小化 map 时没问题,可能是因为没有调用 mapView:didAddAnnotationViews。

我可以在设置动画时以某种方式禁用 mapviews regionWillChange 吗?

动画前:

before

动画进行到一半。看到很多错位的注释。

middle

动画完成。所有放错地方的注释都消失了。

after

最佳答案

作为临时解决方案,我建议您执行以下操作:
1. 在更改框架之前用 mapView 的 screenShot 创建一个 UIImageView
2. 将该 imageView 作为 subview 添加到您的父 View 并隐藏您的 mapView。
3. 动画:imageView 和 mapView 改变它的框架。
4. 在动画的完成 block 中,取消隐藏您的 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];
}];
}

使用这个临时解决方案,直到找到解决该问题的正确方法。

关于ios - 在为其框架设置动画时禁用向 mapView 添加注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24366528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com