在 Swift 中为行插入覆盖 withRowAnimation 样式
Posted
技术标签:
【中文标题】在 Swift 中为行插入覆盖 withRowAnimation 样式【英文标题】:Overriding withRowAnimation styles for row insertion in Swift 【发布时间】:2015-09-04 09:00:21 【问题描述】:我正在使用insertRowAtIndexPath
函数在我的tableview 中插入一系列行。
但是,内置动画样式 (.Fade, .Top, .Bottom e.t.c.)
并不能完全满足我的需求。
我需要创建自己的自定义动画,我知道这可以通过覆盖UITableViewRowAnimation
来完成,但我不确定应该如何处理。
期待您的建议。
欣赏任何见解。
【问题讨论】:
这可能会有所帮助:***.com/questions/11379614/… @johnykumar 谢谢。是的,我见过。问题是 - 它是用 ObjC 编写的,很遗憾,我无法复制解决方案。 好的,让我试试 swift 会尽快回复您。 @johnykumar 成功了吗? 【参考方案1】:在你的 UITableView 子类中试试这个。
override func insertRowsAtIndexPaths(indexPaths: [NSIndexPath], withRowAnimation animation: UITableViewRowAnimation)
super.insertRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.None)
self.endUpdates()
self.beginUpdates()
for indexPath:NSIndexPath in indexPaths
let cell:UITableViewCell? = (super.cellForRowAtIndexPath(indexPath))
if cell != nil
var frame:CGRect = (cell?.frame)!
frame.origin.x = (cell?.frame.size.width)!
cell?.frame = frame
frame.origin.x = 0
let animationBlock = () -> Void in
cell!.frame = frame;
if UIView.respondsToSelector(Selector("animateWithDuration(duration: , delay: , usingSpringWithDamping dampingRatio: , initialSpringVelocity velocity: , options: , animations: , completion: "))
// UIView.animateWithDuration(0.3, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.0, options:0.0, animations: animationBlock, completion:nil)
UIView.animateWithDuration(0.3, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: animationBlock, completion: nil)
else
UIView.animateWithDuration(0.3, delay: 0.0, options:UIViewAnimationOptions.CurveEaseIn, animations: animationBlock, completion: nil)
【讨论】:
为什么是endUpdates()
和beginUpdates()
?
@NRitH 它只是我建议遵循的快速转换的链接代码。我只将它转换为 swift。
感谢您付出的巨大努力。虽然,我在实现代码时遇到了问题。我没有UITableView
类,我只是将UITableViewDatasource
和UITableViewDelegate
以及UIViewController
用于基本表函数-当我尝试添加UITableView
类或替换当前UIViewController
我崩溃了。
在创建 UITableVIew 的选择子类时创建一个类,然后在 .m 文件中添加此方法,然后转到您的故事板或 xib,然后选择 tableview 并进入 Identity Inspector 并为 tableview 分配您的类。
我已经能够通过一些调整使其工作 - [NSIndexPath] 应该更改为 [AnyObject] 等。在代码中。然而问题是 - 它动画整个块的插入,我正在寻找每个单元格的插入。这可能吗?以上是关于在 Swift 中为行插入覆盖 withRowAnimation 样式的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 3.1 中为 UIView 子类设置默认外观而不覆盖 initialize()