我是 CAShapeLayers 的新手,如果这是一个明显的修复,请原谅我。我试图在 View 向上移动时与 UIScrollView 同步移动一条线,但在 ScrollView 向下移动时保持该线静止。我正在使用委托(delegate)来检测 ScrollView 何时移动,这是我在可见行之间切换的代码。
func scrollViewDidScroll(_ scrollView: UIScrollView){
if(mainScrollView.contentOffset.y < CGFloat(0.0)){
topMainContentViewLine!.isHidden = false
largeRocketImageView!.isHidden = true
topViewLine!.isHidden = true
}else if(mainScrollView.contentOffset.y == CGFloat(0)){
topMainContentViewLine!.isHidden = false
topViewLine!.isHidden = false
}else{
largeRocketImageView!.isHidden = false
topMainContentViewLine!.isHidden = true
topViewLine!.isHidden = false
}
}
当我运行我的应用程序时,我可以很容易地看到这两条线正在淡入和淡出,而不是立即出现和消失。为了比较图像没有动画。关于如何摆脱动画的任何想法?再次感谢!
最佳答案
来自文档:
https://developer.apple.com/documentation/quartzcore/calayer/1410838-ishidden
isHidden
A Boolean indicating whether the layer is displayed. Animatable.
看到“动画”这个词了吗?这是一个相当严格的速记;这意味着当您在不是 UIView 的底层支持层(例如任何独立子层)的层上设置此属性时,动画是默认值。这称为隐式层动画。
如果在这些情况下您不想要动画属性,您可以通过调用关闭动画
CATransaction.setDisableActions(true)
您可以为特定的显式事务 block (即匹配 begin()
和 commit()
命令之间的所有内容)或为整个隐式事务执行此操作你所有的代码都在运行。
更常见的是,如果您有一个您总是或大部分不想要动画的图层,您会将其托管为自定义 UIView 的底层。在那种情况下,设置动画属性将不会动画,如果您需要动画,您可以使用显式 CAAnimation(或 UIView 动画)来获取它。
For comparison the image has no animation
因为 largeRocketImageView
本身不是层;这是一个 View 。
关于swift - CAShapeLayer.isHidden 自动快速应用动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49433244/