Ios 如果用户快速滚动,WithRow动画效果将消失
我正面临一个关于Ios 如果用户快速滚动,WithRow动画效果将消失,ios,swift,uitableview,animation,Ios,Swift,Uitableview,Animation,我正面临一个关于insertRowsAtIndexPaths函数的问题,确切地说,它是withRowAnimation参数 在stack社区的帮助下,我已经能够将插入效果从快速淡入修改为较长淡入(通过覆盖函数),但是如果我向上滚动表格视图,从视图中隐藏单元格,然后再次向后滚动,整个效果将完全消失 由于这些单元被重复使用,因此效果完全无效。 我尝试过使用ScrollToRowatineXpath函数(在这种情况下不起作用-它在单元格已经加载后启动,然后向下滚动,效果已经消失)以及将内容偏移量设置为
insertRowsAtIndexPaths
函数的问题,确切地说,它是withRowAnimation
参数
在stack社区的帮助下,我已经能够将插入效果从快速淡入修改为较长淡入(通过覆盖函数),但是如果我向上滚动表格视图,从视图中隐藏单元格,然后再次向后滚动,整个效果将完全消失
由于这些单元被重复使用,因此效果完全无效。
我尝试过使用ScrollToRowatineXpath
函数(在这种情况下不起作用-它在单元格已经加载后启动,然后向下滚动,效果已经消失)以及将内容偏移量设置为tableView.contentSize.height
-结果有些令人满意,但同样不能防止用户滚动时插入效果消失。另外,
willDisplayCell
也不是一个选项,因为它在用户每次滚动时都会对单元格进行动画处理,我需要动画只运行一次。(乌尔)
到目前为止,我还不知道如何防止这个问题发生
更新:添加了suclass代码
class CustomTable: UITableView{
override func insertRowsAtIndexPaths(indexPaths: [NSIndexPath], withRowAnimation animation: UITableViewRowAnimation) {
self.endUpdates()
self.beginUpdates()
for indexPath:AnyObject in indexPaths{
let cell:UITableViewCell? = (super.cellForRowAtIndexPath(indexPath as! NSIndexPath));
if cell != nil {
cell!.alpha = 0
let animationBlock = { () -> Void in
cell!.alpha = 1;
}
if UIView.respondsToSelector(Selector("animateWithDuration(duration: , delay: , usingSpringWithDamping dampingRatio: , initialSpringVelocity velocity: , options: , animations: , completion: ")){
UIView.animateWithDuration(3, delay: 3.0, usingSpringWithDamping: 1.5, initialSpringVelocity: 0.0, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: animationBlock, completion: nil)
}else{
UIView.animateWithDuration(3.3, delay: 5.0, options:UIViewAnimationOptions.TransitionCrossDissolve, animations: animationBlock, completion: nil)
}
}
}
}
}您的意思是,如果插入“已使用”单元格,自定义淡入淡出效果不起作用吗?你能展示一些代码吗?听起来您正在设置单元格子类中的某个变量,您需要在
prepareforeuse
@Paulw11中清除该变量。只有当单元格在屏幕上可见时,自定义淡入效果才会起作用,一旦我向任何方向滚动以隐藏这些单元格并向后滚动以再次显示它们,它们就会忽略动画,看起来就像使用reloadTable
方法一样。@Paulw11我已经为UITableView
的子类添加了代码,但我仍然不明白当滚动到以前插入的单元格时会发生什么细胞出现了?您希望该单元格淡入淡出,而不是仅仅显示?或者您是说,如果在屏幕外的单元格后插入单元格,则希望该单元格在第一次滚动到视图时淡入淡出?因此,您的问题是,如果该单元格不在屏幕上,则cellforrowatinexpath
将返回零,当你滚动时,单元格就会出现,因为插入操作已经发生了。您将需要跟踪阵列或类似阵列中插入单元格的状态,并在第一次显示单元格时执行淡入cellforrowatinexpath
自定义淡入效果是否意味着插入“已使用”单元格时自定义淡入效果不起作用?你能展示一些代码吗?听起来您正在设置单元格子类中的某个变量,您需要在prepareforeuse
@Paulw11中清除该变量。只有当单元格在屏幕上可见时,自定义淡入效果才会起作用,一旦我向任何方向滚动以隐藏这些单元格并向后滚动以再次显示它们,它们就会忽略动画,看起来就像使用reloadTable
方法一样。@Paulw11我已经为UITableView
的子类添加了代码,但我仍然不明白当滚动到以前插入的单元格时会发生什么细胞出现了?您希望该单元格淡入淡出,而不是仅仅显示?或者您是说,如果在屏幕外的单元格后插入单元格,则希望该单元格在第一次滚动到视图时淡入淡出?因此,您的问题是,如果该单元格不在屏幕上,则cellforrowatinexpath
将返回零,当你滚动时,单元格就会出现,因为插入操作已经发生了。您将需要跟踪阵列或类似阵列中插入单元格的状态,并在第一次显示单元格时执行淡入cellforrowatinexpath