我想做一些测试。我想,让我们为 UITableView
中的单元格制作一个动画,例如:它从正常大小开始,水平扩展到正常大小一点,水平缩小到正常大小以下一点,然后返回到正常大小。所以我想做这个:
let width = cell.frame.size.width
cell.frame = CGRectMake(0, cell.frame.origin.y, width, cell.frame.size.height)
UIView.animateWithDuration(4.25, animations: {
cell.frame = CGRectMake(width * -1/8, cell.frame.origin.y, width * 5/4, cell.frame.size.height)
}, completion: { finished in
UIView.animateWithDuration(2.5, animations: {
cell.frame = CGRectMake(width * 1/8, cell.frame.origin.y, width * 3/4, cell.frame.size.height)
}, completion: { finished in
UIView.animateWithDuration(1.25) {
cell.frame = CGRectMake(0, cell.frame.origin.y, width, cell.frame.size.height)
}
})
})
在级联中使用动画和补全。问题出在一开始。框架在水平方向上快速缩小(而不是展开),然后缓慢(4.25 秒)展开到正常大小。然后它会减少,然后按预期扩展回正常状态。
我做错了什么吗?
最佳答案
我实际上正在摆弄动画,就像你刚才做的那样:)
你可以更容易地做水平效果;您无需重新定义框架本身,只需调整单元格的水平边界即可:
cell.bounds.size.width += 30 //grow it horizontally by 30 points
还有一个更简洁的方法来处理这个问题:UIView.animateKeyframesWithDuration(_delay: options:animations:completion:)
使用 animateKeyframes,您可以按顺序串起不同动画效果的列表,这就是您想要的。我将从你开始:
UIView.animateKeyframesWithDuration(4.0, delay: 0.0, options: nil, animations: {
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.25, animations: {
self.cell.bounds.size.width += 30
})
UIView.addKeyframeWithRelativeStartTime(2.5, relativeDuration: 0.1, animations: {
self.cell.bounds.size.width -= 60
})
UIView.addKeyframeWithRelativeStartTime(3.0, relativeDuration: 0.1, animations: {
self.cell.bounds.size.width += 30
})
}, completion: nil)
简而言之,您定义动画发生的持续时间。对于上面的代码示例,我定义了 4 秒。
在 4 秒内,我定义了 3 个不同的动画,指定它们应该在什么时间触发,以及应该触发多长时间(relativeDuration,相对于 4.0 秒的值)。
调整这些数字将允许您自定义时间。
希望有效!
关于ios - 如何获得我想要的动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29687053/