CAShapeLayer.isHidden 在 swift 中自动应用动画



我是CAShapeLayers的新手,所以如果这是一个明显的修复,请原谅我。当视图向上移动时,我试图与 UIScrollView 同步移动一行,但在滚动视图向下移动时保持线条静止。我正在使用委托来检测滚动视图何时移动,这是我在可见行之间更改的代码。

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

是隐藏的

指示是否显示图层的布尔值。可动画化。

看到"可动画"这个词了吗?这是一个相当紧凑的速记;这意味着,当您在不是 UIView 的底层支持层(例如任何独立子图层)的图层上设置此属性时,动画是默认值。这称为隐式图层动画

如果不希望在这些情况下对可制作动画属性进行动画处理,可以通过调用

CATransaction.setDisableActions(true)

您可以针对特定的显式事务块(即匹配begin()commit()命令之间的所有内容)执行此操作,也可以针对运行所有代码的整个隐式事务执行此操作。

更常见的是,如果你有一个总是或大部分不需要动画的层,你可以将其托管为自定义 UIView 的基础层。在这种情况下,设置可动画属性不会进行动画处理,如果需要动画,则可以使用显式 CAAnimation(或 UIView 动画)来获取它。

为了进行比较,图像没有动画

因为largeRocketImageView本身不是一个图层;它是一个视图。

最新更新