addSubview 在 swift 中破坏动画
Posted
技术标签:
【中文标题】addSubview 在 swift 中破坏动画【英文标题】:addSubview disrupts animation in swift 【发布时间】:2016-12-29 10:05:15 【问题描述】:调用动画的方法
for button in self.exploreButtonsArray
button.exploreButtonExitAnimation()
setupDrinkExploreButtons()
动画代码:
func exploreButtonExitAnimation()
UIView.animateWithDuration(random, delay: 0.0, options: [], animations:
self.center.x -= 400
, completion: (value: Bool) in
self.removeFromSuperview()
)
setupDrinkExploreButtons()
方法调用.addSubview(exploreButton)
并向容器添加一些按钮。我的动画是不是因为这些动作是异步执行的而搞砸了?
第一张图片:这是任何动画之前的第一个视图
第二张图片:不调用 setupDrinkExploreButtons() 时视图的外观。所有按钮都优雅地向左移动。
第三张图片:调用 setupDrinkExploreButtons() 时的样子
在第三张图片中,您可以看到按钮没有消失,而是似乎“动画化”以适应视图。他们没有像他们应该的那样向左移动 400 个单位,而是突然向右出现 400 个单位,然后向左移动以适应其原始位置???
【问题讨论】:
您可能需要检查“随机”的值以查看它们是否在适当的范围值内。 @Dasem 动画的问题不在于速度是随机的。我已经截取了一些屏幕截图来演示问题是如何发生的。 【参考方案1】:我最好的猜测是您在 self.exploreButtonsArray 中使用对旧视图的相同引用,或者在创建新视图时清空数组。如果你想发布你的代码,那么我可以看看。
不过,我有几点建议:
首先,这是一种不太可靠的动画制作方式。您将创建十几个动画块,根据时间的不同,它们的开始和结束时间可能略有不同。这可能会或可能不会引起注意,但这是一个坏习惯并且效率较低。为避免此问题,您可以执行以下操作:
UIView.animate(withDuration: random, delay: 0.0, options: [], animations:
for button in self.exploreButtonsArray
// BTW this is also unreliable, I would strongly suggest using definite values when animating
button.center.x -= 400
, completion: (finished) in
for button in self.exploreButtonsArray
button.removeFromSuperview()
)
其次,如果您像这样将视图组合在一起,最好将它们全部放在一个视图中,然后为该视图设置动画。这在性能方面更有效,并且在编码时更简单。
第三,您似乎正在尝试进行一些非常简单的分页。如果您只是玩得开心并想自己实现它,那就去做吧!如果没有,您可能想使用UIPageViewController 或UICollectionViewController。我保证这意味着更少的头痛:)
【讨论】:
以上是关于addSubview 在 swift 中破坏动画的主要内容,如果未能解决你的问题,请参考以下文章
Swift4滚动UITableview后,动画UITableview框架是错误的
swift 使 UIImageView 和 UIView 像一层一样使它们一起动画