我是新手,所以请原谅我,如果这是一个明显的解决办法。当视图向上移动时,我试图与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的底层托管。在这种情况下,设置可设置动画的属性不会设置动画,如果需要动画,可以使用显式动画(或UIView动画)来获取它。
为了比较,图像没有动画
因为largeRocketImageView本身不是一个层,而是一个视图。

10-05 20:20
查看更多