如何来回移动UITableViewCell以显示它可以刷?

时间:2017-10-23 03:05:27

标签: ios swift

我在某些应用程序中看到,当你进入一个带有tableview的屏幕时,会有一个简短的动画片开始被刷过,显示红色的“刷卡删除”按钮(UIContextualAction按钮),然后它恢复正常。它正在为用户提供提示:“可以刷这些行。”

有没有办法达到这个效果?也许是一种以编程方式启动行滑动然后取消它的方法?

2 个答案:

答案 0 :(得分:3)

快速解决方案

嗯,大约1.5年后,我终于想出了一个解决方案。

步骤1-单元界面设置

我这样设置我的自定义表格视图单元: UI Work

  • A和B代表滑动动作的颜色。
  • C是我要左右动画的UIView。

第2步-向单元格添加动画

func animateSwipeHint() {
    slideInFromRight()
}

private func slideInFromRight() {
    UIView.animate(withDuration: 0.5, delay: 0.3, options: [.curveEaseOut], animations: {
        self.cellBackgroundView.transform = CGAffineTransform(translationX: -self.swipeHintDistance, y: 0)
        self.cellBackgroundView.layer.cornerRadius = 10
    }) { (success) in
        UIView.animate(withDuration: 0.2, delay: 0, options: [.curveLinear], animations: {
            self.cellBackgroundView.transform = .identity
        }, completion: { (success) in
            // Slide from left if you have leading swipe actions
            self.slideInFromLeft()
        })
    }
}

private func slideInFromLeft() {
    UIView.animate(withDuration: 0.5, delay: 0, options: [.curveEaseOut], animations: {
        self.cellBackgroundView.transform = CGAffineTransform(translationX: self.swipeHintDistance, y: 0)
    }) { (success) in
        UIView.animate(withDuration: 0.2, delay: 0, options: [.curveLinear], animations: {
            self.cellBackgroundView.transform = .identity
        })
    }
}

第3步-触发动画

在具有表视图的视图控制器的viewDidLoad中,我有以下代码:

if self.tableView.visibleCells.count > 0 {
    let cell = self.tableView.visibleCells[0] as! TableViewCell
    cell.animateSwipeHint()
}

示例:

Example Animation

视频解决方案

如果您想更深入地了解此解决方案,请创建一个视频: https://youtu.be/oAGoFd_GrxE

答案 1 :(得分:0)

我有一段代码,我很久以前就看到了动画视图。由于我们的UITableViewCell也是一个视图,我们可以使用它:)你只需要让你的可见单元格动画,就像这样:

if let visibleCell = self.tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as? CustomCell {
        print("Started animation...")
        let animation = CAKeyframeAnimation(keyPath: "transform.translation.x")
        animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        animation.duration = 0.6
        animation.values = [-20.0, 20.0, -20.0, 20.0, -10.0, 10.0, -5.0, 5.0, 0.0 ]
        visibleCell.layer.add(animation, forKey: "shake")
    }

如果这有帮助,请告诉我。测试了它。

编辑:

动画您的UITableView让用户看到他们可以在单元格上滑动非常简单,请尝试如下:

    DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
        self.tableView.setEditing(true, animated: true)
        DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
            self.tableView.setEditing(false, animated: true)
        }
    }

然而,如果你想以编程方式滑动你的单元格以显示你的自定义行动作(我已经研究了一个小时),你只能通过使用方法调配实现这一点。请参阅此答案:http://codejaxy.com/q/186524/ios-swift-uitableview-how-to-present-uitableviewrowactions-from-pressing-a-button