当它们加载时我将如何淡入细胞?

时间:2015-10-01 04:38:39

标签: ios swift scroll tableview fade

目前我正在使用这种方法的课程。

class TipInCellAnimator {
// placeholder for things to come -- only fades in for now
class func animate(cell:UITableViewCell) {
    let view = cell.contentView
    view.layer.opacity = 0.1
    UIView.animateWithDuration(0.1) {
        view.layer.opacity = 1
    }
}
}

在我的主viewcontroller中调用它,如下所示

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,
       forRowAtIndexPath indexPath: NSIndexPath) {
            TipInCellAnimator.animate(cell)
    }

我遇到的问题是,当重新加载项目时,单元格会闪烁,因为它正在淡入,我无法点击屏幕来停止滚动。

有没有人有关于如何解决这些问题或其他方法达到相同效果的一些提示?

1 个答案:

答案 0 :(得分:5)

通过查看您的代码,最明显的原因是"闪烁"单元格是因为动画的持续时间。尝试将持续时间从0.1增加到0.5

对于第二个问题,默认情况下iOS会在其视图为动画时忽略用户交互。要启用此功能,请将UIViewAnimationOptions中的选项设置为" AllowUserInteraction"。

请参阅以下Swift 1.2代码

class func animate(cell:UITableViewCell) {
        let view = cell.contentView
        view.layer.opacity = 0.1
        UIView.animateWithDuration(0.5, delay: 0, options: .AllowUserInteraction | .CurveEaseInOut, animations: { () -> Void in
            view.layer.opacity = 1
            }, completion: nil)
}

或者在Swift 2.0中

class func animate(cell:UITableViewCell) {
        let view = cell.contentView
        view.layer.opacity = 0.1
        UIView.animateWithDuration(0.5, delay: 0, options: [.AllowUserInteraction, .CurveEaseInOut], animations: { () -> Void in
            view.layer.opacity = 1
            }, completion: nil)
}