UIViewPropertyAnimator 无法按预期工作
Posted
技术标签:
【中文标题】UIViewPropertyAnimator 无法按预期工作【英文标题】:UIViewPropertyAnimator doesn’t work as expected 【发布时间】:2019-08-17 04:18:43 【问题描述】:当用户点击 UIView 时,我正在尝试为 UIView 和 imageView 设置动画。这是我的代码:
// When the user taps on the featured story image view
@objc func feturedStoryTapped()
/*featuredStoryView.layer.zPosition = 1
// Hide the necessary elements
self.featuredTitle.isHidden = true
self.bookTitle.isHidden = true
self.authorName.isHidden = true
// Unhide the necessary elements
self.exitButton.isHidden = false*/
let animator = UIViewPropertyAnimator(duration: 0.9, dampingRatio: 0.4, animations:
self.featuredStoryView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
self.bookCover.frame = CGRect(x: 100, y: 75, width: 250, height: 280)
)
animator.startAnimation()
预期行为: 当我点击一次 UIView 时,视图应该占据整个屏幕,并且 imageView 应该缩小一点。
问题 问题是,当我点击一次视图时,视图占据了整个屏幕,但 imageView 并没有缩小,只有在我第二次点击时才会缩小。
当我点击视图一次时,我希望这两个任务都能执行。我将添加一个 GIF 以帮助理解。
【问题讨论】:
【参考方案1】:固定它,只需在属性动画器内的两行代码之间添加view.layoutIfNeeded()
。
// When the user taps on the featured story image view
@objc func feturedStoryTapped()
/*featuredStoryView.layer.zPosition = 1
// Hide the necessary elements
self.featuredTitle.isHidden = true
self.bookTitle.isHidden = true
self.authorName.isHidden = true
// Unhide the necessary elements
self.exitButton.isHidden = false*/
let animator = UIViewPropertyAnimator(duration: 0.9, dampingRatio: 0.4, animations:
self.featuredStoryView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
Self.view.layoutIfNeeded()
self.bookCover.frame = CGRect(x: 100, y: 75, width: 250, height: 280)
)
animator.startAnimation()
【讨论】:
以上是关于UIViewPropertyAnimator 无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
UIViewPropertyAnimator 自动布局完成问题
暂停时调用 UIViewPropertyAnimator 完成