ios - 第一次动画有问题

标签 ios swift

我使用以下方法对 View gradientView 输入/输出进行动画处理:

func hideOrShowGradientView(hide: Bool) {
    UIView.animate(withDuration: 0.4, animations: {
        self.gradientView.isHidden = hide
    })
}

效果很好,但第一次没有动画。它只是出现。第二次和第三次效果非常好。我尝试在主线程上调用动画 block ,但没有成功。为什么这个动画第一次且唯一一次没有出现?我应该使用另一种动画方法吗?

最佳答案

您是否尝试过调用self.view.layoutIfNeeded()。它强制 View 及其 subview 立即完成任何待处理的动画,这可能会干扰您的动画。您可以像这样使用它:

func hideOrShowGradientView(hide: Bool) {
    self.view.layoutIfNeeded()
    UIView.animate(withDuration: 0.4, animations: {
        self.gradientView.isHidden = hide
        self.view.layoutIfNeeded()
    })
}

Apple 建议调用 layoutIfNeeded() 两次,一次在动画 block 之前,这会强制在 View 及其 subview 上重绘,并且它会完成 View 上所有待处理的动画,而无需等待下一个更新周期,并在动画 block 内第二次调用它,以确保动画更改将立即应用。

关于ios - 第一次动画有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46208407/

相关文章:

ios - OpenGL绘制多个等角立方体

swift - 如何在 tableview 单元格中按顺序放置 3 个不同的图像?

xcode - 使用 segue 形式 UITabBarItem 传递数据不起作用

ios - 无法使用 Facebook SDK 快速获得登录回调

android - 地址栏隐藏 iOS/Android/Mobile Chrome 时背景图片跳转

ios - uicollectionview 重新加载后无法获取单元格

ios - UITabBar 标题十六进制值

ios - 用 Collection View 替换所有 TableView 是好习惯吗?

swift - NSSearchField TextDidChange 的方法是什么?

加载时 Swift 会改变图像的颜色