我正在使用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)
所以看起来,即使我设置了"隐藏"属性优先(在前两行)这是以某种方式延迟并且仅在动画已经运行时执行。请注意,这仅在第一次创建视图时发生;后续的显示/隐藏操作工作正常(视图在动画之前完全取消隐藏)。
我注意到有一个"完成"钩子 - 是否有相当于准备阶段的东西?即在视图完全取消隐藏之前,不要启动动画。
答案 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
中,取消隐藏它们并执行上面发布的动画。