在UIView.animateWithDuration之前完全取消隐藏视图

时间:2015-05-10 05:25:46

标签: ios uiview uiviewanimation

我正在使用UIView.animateWithDuration在轻击识别时在视图中滑动。这是正常工作,除了,第一次,视图稍晚被隐藏,它突然出现在动画的中间。后续的显示/隐藏操作没有此问题。

我正在实现如下

    textBlurBackground.hidden = false
    descriptionOutlet.hidden = false
    UIView.animateWithDuration(0.4, delay: 0.0, options: nil, animations: {
        self.textBlurBackground.transform = CGAffineTransformMakeTranslation(0, 0)
        self.descriptionOutlet.transform = CGAffineTransformMakeTranslation(0, 0)
        }, completion: nil)

所以看起来,即使我设置了"隐藏"属性优先(在前两行)这是以某种方式延迟并且仅在动画已经运行时执行。请注意,这仅在第一次创建视图时发生;后续的显示/隐藏操作工作正常(视图在动画之前完全取消隐藏)。

我注意到有一个"完成"钩子 - 是否有相当于准备阶段的东西?即在视图完全取消隐藏之前,不要启动动画。

2 个答案:

答案 0 :(得分:1)

感谢评论中的时间建议(以及缓慢运行),我可以弄清楚,在这种情况下,这不是一个时间问题,而是视图的尺寸在某种程度上是不正确的加载。例如。我有viewDidLoad

override func viewDidLoad() {
    textBlurBackground.hidden = true
    descriptionOutlet.hidden = true
    descriptionOutlet.transform = CGAffineTransformMakeTranslation(-textBlurBackground.bounds.width, 0)
    textBlurBackground.transform = CGAffineTransformMakeTranslation(-textBlurBackground.bounds.width, 0)
}

此时textBlurBackground.bounds.width不正确;该代码没有通过textBlueBackground视图的负宽度将这些视图完全移出屏幕。但是,一旦加载了视图,后续的显示/隐藏操作就可以正常工作,因为它可以为视图获得正确的大小。

因此,这似乎是自动布局大小调整的问题,其中" textBlurBackground.bounds.width"在初始视图加载时不正确。这很奇怪,因为它不会改变大小,所以我可能需要指定一些更多的约束。

答案 1 :(得分:0)

第一次显示视图可能需要几毫秒,因为它必须在屏幕上呈现/绘制,主要是如果此视图包含大量子视图。您是否在同一个handleTap函数中实例化该视图?您应该在UIViewController的viewDidLoad方法或UIView的init中实例化视图。设置隐藏在实例化视图后需要隐藏的内容。接下来,在handleTap中,取消隐藏它们并执行上面发布的动画。