我是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
本身不是一个图层;它是一个视图。