CAShapeLayer.ishiden在swift中自动应用动画
我对CAShapeLayers不熟悉,所以如果这是一个明显的修复,请原谅我。当视图向上移动时,我尝试与UIScrollView同步移动一行,但当滚动视图向下移动时,保持该行静止。我使用委托来检测滚动视图何时移动,这是我在可见行之间切换的代码CAShapeLayer.ishiden在swift中自动应用动画,swift,uiscrollview,core-animation,cashapelayer,Swift,Uiscrollview,Core Animation,Cashapelayer,我对CAShapeLayers不熟悉,所以如果这是一个明显的修复,请原谅我。当视图向上移动时,我尝试与UIScrollView同步移动一行,但当滚动视图向下移动时,保持该行静止。我使用委托来检测滚动视图何时移动,这是我在可见行之间切换的代码 func scrollViewDidScroll(_ scrollView: UIScrollView){ if(mainScrollView.contentOffset.y < CGFloat(0.0)){ topMainCo
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
}
}
func scrollViewDidScroll(scrollView:UIScrollView){
if(mainsrollview.contentOffset.y
当我运行我的应用程序时,我可以很容易地看到这两条线正在淡入淡出,而不是立即出现和消失。为了进行比较,图像没有动画。关于如何摆脱动画有什么想法吗?再次感谢 来自文档: 伊希登 指示是否显示图层的布尔值。可动画化 看到“可动画化”这个词了吗?这是一个相当严格的速记;这意味着,当您在不是UIView底层背景层的层(例如,任何独立子层)上设置此属性时,动画是默认设置。这称为隐式层动画 如果在这些情况下不需要可设置动画的特性的动画,可以通过调用
CATransaction.setDisableActions(true)
您可以为特定的显式事务块(即匹配begin()
和commit()
命令之间的所有内容)或运行所有代码的整个隐式事务执行此操作
更常见的情况是,如果您有一个始终或基本上不需要动画的层,则可以将其作为自定义UIView的底层宿主。在这种情况下,设置可设置动画的属性不会设置动画,如果需要动画,可以使用显式动画(或UIView动画)来获取动画
为了进行比较,图像没有动画
因为
largeRocketImageView
本身不是一个层;这是一个视图。来自文档:
伊希登
指示是否显示图层的布尔值。可动画化
看到“可动画化”这个词了吗?这是一个相当严格的速记;这意味着,当您在不是UIView底层背景层的层(例如,任何独立子层)上设置此属性时,动画是默认设置。这称为隐式层动画
如果在这些情况下不需要可设置动画的特性的动画,可以通过调用
CATransaction.setDisableActions(true)
您可以为特定的显式事务块(即匹配begin()
和commit()
命令之间的所有内容)或运行所有代码的整个隐式事务执行此操作
更常见的情况是,如果您有一个始终或基本上不需要动画的层,则可以将其作为自定义UIView的底层宿主。在这种情况下,设置可设置动画的属性不会设置动画,如果需要动画,可以使用显式动画(或UIView动画)来获取动画
为了进行比较,图像没有动画
因为
largeRocketImageView
本身不是一个层;这是一个视图。只是一个问题,但是您是否尝试过将您的.ishiden
调用放在一个主队列线程上,以查看这是否是动画的线程问题?例如,您可以执行一个DispatchQueue.main.async{self.largeRocketImageView!.ishiden=true}
,然后查看结果是否发生了变化?只需尝试一下,没有什么变化。是否有任何方法可以查看“.ishiden()”是否使用某种类型的默认动画?这只是一个问题,但是您是否尝试将.ishiden
调用放在主队列线程上,以查看动画是否存在线程问题?例如,您可以执行一个DispatchQueue.main.async{self.largeRocketImageView!.ishiden=true}
,然后查看结果是否发生了变化?只需尝试一下,没有什么变化。有没有办法查看“.ishiden()”是否使用某种类型的默认动画?有关此主题的更多信息,请参阅我的“非常感谢”!我试图以其他方式禁用动画,但从未遇到过这种情况!工作起来很有魅力!有关此主题的更多信息,请参阅我的“非常感谢”!我试图以其他方式禁用动画,但从未遇到过这种情况!工作起来很有魅力!