Fon*_*e f 6 mkmapview mkannotationview ios
从iOS 11开始,当我setImage在自定义中使用时MKAnnotationView,图像会显示为带有动画。
问题是当我选择和取消选择时MKAnnotationView,图像具有不同的大小。这会产生奇怪的动画。
在iOS 11之前没有问题,我们可以停止这种行为吗?
看到这是我在过去一年半中在任何地方发现的唯一提到的这个问题(功能?),首先让我感谢你是我唯一的理智来源。有了这个,我终于能够回过头来揭开这个......有点。我还没有提交雷达,只是因为不清楚这种行为是否有意。无论正确的行为是什么,动画都有一些奇怪的副作用,这让我报告了一个单独的问题。
归根结底,该image字段不是一个可设置动画的字段,但在用户定义的事务之外更新它会触发系统执行的从前一个图像到新图像的路径动画。由于动画是在层级执行的,UIKit将无法阻止它们。相反,我们必须完全停止当前线程事务的动画操作,以便永远不允许执行嵌套层动画:
CATransaction.begin()
CATransaction.setDisableActions(true)
annotationView.image = newImage
CATransaction.commit()
Run Code Online (Sandbox Code Playgroud)
除了完全切断动画之外,您还可以通过将您自己的属性注入当前线程事务来消除路径动画。不过,这里的问题是,为了正确地为路径设置动画并使图像看起来没有移动(例如,从小图钉动画到大图钉),我们必须同步centerOffset. 这个字段确实not直接修改了图层,但它看起来确实是一个 UIKit-animatable 字段。这意味着您需要将 UIKit 动画与 CoreAnimation 事务结合起来:
CATransaction.begin()
CATransaction.setAnimationDuration(animationDuration)
CATransaction.setAnimationTimingFunction(CAMediaTimingFunction(name: .easeIn))
UIView.animate(withDuration: animationDuration, delay: 0, options: .curveEaseIn, animations: {
self.image = newImage
self.centerOffset = newCenterOffset
}, completion: nil)
CATransaction.commit()
Run Code Online (Sandbox Code Playgroud)
UIKit 动画和 CoreAnimation 事务的持续时间和计时功能必须相同。
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |