ios - 如何获得我想要的动画?

标签 ios swift animation

我想做一些测试。我想,让我们为 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/

相关文章:

ios - iOS 上的 Tapkey Mobile SDK 崩溃 - java.lang.IllegalArgumentException

objective-c - 检查sqlite列类型

ios - 删除关系对象时更新 NSFetchedResultsController 对象

ios - Swift Playgrounds 中的 JavaScriptCore

swift - 如何为 UITableViewCell TextView 对象实现实时字数统计?

swift - Xcode/Firebase 改进搜索功能

swift - 如何在给定 Swift 中的键的情况下返回映射数据的值?

c++ - OpenGL - 这是在舞台上绘制旋转环的正确方法吗?

javascript - jQuery 显示隐藏多个链接

iphone - 我想在缩放到新 View 时使用 UIViewAnimationOptionTransitionFlipFromRight