Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CAShapeLayer.ishiden在swift中自动应用动画_Swift_Uiscrollview_Core Animation_Cashapelayer - Fatal编程技术网

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

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

我对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
    }
}
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()”是否使用某种类型的默认动画?有关此主题的更多信息,请参阅我的“非常感谢”!我试图以其他方式禁用动画,但从未遇到过这种情况!工作起来很有魅力!有关此主题的更多信息,请参阅我的“非常感谢”!我试图以其他方式禁用动画,但从未遇到过这种情况!工作起来很有魅力!