如何为UITableView单元添加视差效果

时间:2018-03-08 02:45:49

标签: swift uitableview parallax uimotioneffect

你好我正在创建一种社交媒体应用程序,我正在使用表格视图来显示所有信息,我已经做了视差效果,起初它工作得非常顺利,但经过几次移动我的设备它成为晚餐紧张和快速的方式

这是我创建的扩展,我将添加到我的TableViewCellView :(我称之为:myCell.addParallax(幅度:10))

extension UIView {
func addParallax(magnitude: Float) {
    let xMotion = UIInterpolatingMotionEffect(keyPath: "center.x", type: .tiltAlongHorizontalAxis)
    xMotion.maximumRelativeValue = magnitude
    xMotion.minimumRelativeValue = -magnitude

    let yMotion = UIInterpolatingMotionEffect(keyPath: "center.y", type: .tiltAlongVerticalAxis)
    yMotion.maximumRelativeValue = magnitude
    yMotion.minimumRelativeValue = -magnitude

    let motionEffect = UIMotionEffectGroup()
    motionEffect.motionEffects = [xMotion, yMotion]
    self.addMotionEffect(motionEffect)
}
}

1 个答案:

答案 0 :(得分:0)

当用户滚动表格时,您的UITableViewCell被重复使用。在cellForRow atIndexPath方法中,您最有可能使用tableView.dequeueReusableCell方法。此方法不会一直创建新单元格,它会重用那些不再可见的单元格。

每次调用UIMotionEffectGroup时,您创建的UITableViewCell都会添加到myCell.addParallax(magnitude: 10)。最后,你有很多UIMotionEffectGroup这是问题的根源。确保每个单元格只调用一次此方法,您可以在单元格中使用awakeFromNib方法来实现此目的。