Ios 如何在编辑时设置UITableViewCell的动画?
当用户点击表格视图的“编辑”按钮时,如何设置表格视图单元格中颜色更改的动画 当点击编辑按钮时,苹果的动画将所有单元格的内容向右移动,以在每个单元格中显示删除或插入按钮。我想添加我自己的动画,与苹果的动画同时出现。我成功地制作了单元格布局的动画,但没有改变颜色 这就是我正在做的:Ios 如何在编辑时设置UITableViewCell的动画?,ios,swift,uitableview,animation,Ios,Swift,Uitableview,Animation,当用户点击表格视图的“编辑”按钮时,如何设置表格视图单元格中颜色更改的动画 当点击编辑按钮时,苹果的动画将所有单元格的内容向右移动,以在每个单元格中显示删除或插入按钮。我想添加我自己的动画,与苹果的动画同时出现。我成功地制作了单元格布局的动画,但没有改变颜色 这就是我正在做的: override func willTransition(to state: UITableViewCellStateMask) { super.willTransition(to: state) le
override func willTransition(to state: UITableViewCellStateMask) {
super.willTransition(to: state)
let willEdit = state.contains(.showingEditControlMask)
toDateDaysLayoutConstraint.constant = willEdit ? 5.0 : 25.0
daysNightsLayoutConstraint.constant = willEdit ? 5.0 : 10.0
toDateTextView.textColor = willEdit ? UIColor.red : UIColor.darkText
daysLabel.backgroundColor = willEdit ? UIColor.cyan : UIColor.clear
}
为了清楚起见,上面的layoutConstraint会正确地更改动画,但是颜色会在没有动画的情况下瞬间更改
我还尝试使用UIView块动画设置颜色动画,如下所示:
UIView.animate(withDuration: 5.0) {
self.toDateTextView.textColor = willEdit ? UIColor.red : UIColor.darkText
self.daysLabel.backgroundColor = willEdit ? UIColor.cyan : UIColor.clear
}
但是,我永远无法得到动画的颜色。我已尝试将上述代码放入willTransition(状态:)
,设置编辑(\uu编辑:动画:)
,甚至布局子视图()
。我也在表控制器方法中尝试过。但是,什么都不管用
更新 到目前为止,我还尝试将所有内容包装在
CATransaction.begin()
和CATransaction.commit()
之间,也只使用层动画,甚至在调用super
之后将commit
放入didtransaction
。什么都不管用
我想知道,是否有可能同时制作任何非布局动画的Apple动画?据我所知,您只能为UIView的“可设置动画的”属性设置动画(请参阅)<代码>文本颜色不在其中。我已经使用了
UIView.transition(带有:duration:options:animations)
并且文本颜色正确地“动画化”:
override func willTransition(to state: UITableViewCellStateMask) {
super.willTransition(to: state)
UIView.transition(with: textLabel!, duration: 5.0, options: .transitionCrossDissolve, animations: {
self.textLabel?.textColor = state.rawValue == 1 ? UIColor.red : UIColor.black
})
}
编辑1 在你的评论之后,我设法重现了这个问题。我通过重写
didtransformation(to:)
而不是willTransition(to:)
修复了UILabel的问题。因此,我们首先等待视图调整大小(因为出现了删除按钮),然后设置动画。但是,这对于UITextView
,效果不是很好,除非您确保它具有固定的大小
class TableViewCell: UITableViewCell {
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var label: UILabel!
override func didTransition(to state: UITableViewCellStateMask) {
super.didTransition(to: state)
UIView.transition(with: textView, duration: 3, options: .transitionCrossDissolve, animations: {
self.textView.textColor = state.rawValue == 1 ? UIColor.red : UIColor.black
})
UIView.transition(with: label, duration: 3, options: .transitionCrossDissolve, animations: {
self.label.backgroundColor = state.rawValue == 1 ? UIColor.red : UIColor.white
})
}
}
编辑2
如果需要调整文本视图的大小,请异步执行动画:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
UIView.transition(with: self.textView, duration: 3, options: .transitionCrossDissolve, animations: {
self.textView.textColor = state.rawValue == 1 ? UIColor.red : UIColor.black
})
}
顺便说一下,我还尝试将UITextView
子类化,并覆盖layoutSubviews
,但没有成功…这很好。终于有彩色动画工作了!但是,它还没有完全起作用。现在有一个文本标签的双重图像,我猜,是由两个独立的动画造成的。黑色的文本标签正在移动并淡出,而另一个红色标签则显示在淡入的不同位置。即使我尝试将时间与苹果的动画相匹配,它仍然显得模糊。而且,对于backgroundColor动画,即使与时间匹配,您仍然可以看到标签的双图像。+1对于textColor动画。谢谢你的建议!但是,主要的问题仍然没有得到回答:你怎么能同时制作一个彩色动画和苹果的呢?还是不可能?我会留下问题,看看是否有人能给出答案。@salo.dm你的意思是同时向细胞过渡的彩色动画?是的,没错。就像在willTransition
中更改布局约束一样。这些变化与苹果为出现的按钮制作的动画同步。那么,如何在显示按钮的同时设置颜色动画呢?