Ios 如何使用RxSwift在可扩展单元上制作平滑动画
我有创建可扩展表视图单元格这样的常规任务。 由于我的模块是使用RxSwift编写的,所以我决定将此框架用于特定任务。 虽然我的解决方案满足功能需求,但我希望改进UI。到现在为止,当我取消选择我的细胞时,我有非常粗糙的动画 我的布局如下所示:Ios 如何使用RxSwift在可扩展单元上制作平滑动画,ios,swift,animation,rx-swift,Ios,Swift,Animation,Rx Swift,我有创建可扩展表视图单元格这样的常规任务。 由于我的模块是使用RxSwift编写的,所以我决定将此框架用于特定任务。 虽然我的解决方案满足功能需求,但我希望改进UI。到现在为止,当我取消选择我的细胞时,我有非常粗糙的动画 我的布局如下所示: TableViewCell -ContentView --StackView ---MainView ---ExandableView 因此,当我点击一个单元格时,我的ExpandableView正在建立 class ExpandableCell: UIT
TableViewCell
-ContentView
--StackView
---MainView
---ExandableView
因此,当我点击一个单元格时,我的ExpandableView
正在建立
class ExpandableCell: UITableViewCell {
@IBOutlet weak var expandableView: UIView!
@IBOutlet weak var faqArrowImageView: UIImageView!
var isExpanded:Bool = false
{
didSet
{
self.expandableView.isHidden = !self.isExpanded
self.faqArrowImageView.image = self.isExpanded ? UIImage(named: "faq-arrow") : UIImage(named: "faq-arrow-rotated")
}
}
}
在我的VC中,我有这样的订阅,它处理主要的业务逻辑
faqTableView.rx.itemSelected
.subscribe(onNext: { [unowned self] indexPath in
print("Index path is \(indexPath.row)")
let cell = self.faqTableView.cellForRow(at: indexPath) as! ExpandableCell
switch cell.isExpanded {
case true:
self.expandedRows.remove(indexPath.row)
case false:
self.expandedRows.insert(indexPath.row)
}
cell.isExpanded = !cell.isExpanded
self.faqTableView.beginUpdates()
self.faqTableView.endUpdates()
}).addDisposableTo(disposeBag)
正如我所说,我对隐藏我的观点有粗略的处理。
下面是这个问题的演示
此外,我尝试在变量的didSet
中以以下方式添加动画。
但是,这对我也没有帮助
UIView.animate(withDuration: 10.2, delay: 10.2, options:
UIViewAnimationOptions.curveEaseOut, animations: {
self.faqArrowImageView.image = UIImage(named: "faq-arrow-rotated")
}, completion: { finished in
print("animted completed")
})
} else {
self.faqArrowImageView.image = UIImage(named: "faq-arrow")
}
在以下情况下,你能给我什么建议
编辑:
好吧,如果有人面临这个问题,我只是改变一下就解决了
self.faqTableView.beginUpdates()
self.faqTableView.endUpdates()
到
您可以尝试将UICollectionView与单元格的选定/取消选定状态的不同布局一起使用。它不需要任何手动动画,只需替换布局即可。它将自动设置动画。谢谢你的建议。但是,如果我创建了两个不同的UITableView单元格,这不是同一个解决方案吗。使用CollectionsView的主要原因是什么?如果创建两个单元格,则应重新加载当前单元格以获得另一个单元格。如果使用UICollectionView更改布局,则无需重新加载单元格。它的框架会改变。你只需要为依赖于框架约束的单元格设置两种不同的状态,就可以发挥神奇的作用。谢谢你,我会按照你的建议写,如果我愿意的话succeeded@iWheelBuy嗨,我设法听从了你的建议,但我遇到了一个问题。你能看一下吗?您可以尝试将UICollectionView与单元格的选定/取消选定状态的不同布局一起使用。它不需要任何手动动画,只需替换布局即可。它将自动设置动画。谢谢你的建议。但是,如果我创建了两个不同的UITableView单元格,这不是同一个解决方案吗。使用CollectionsView的主要原因是什么?如果创建两个单元格,则应重新加载当前单元格以获得另一个单元格。如果使用UICollectionView更改布局,则无需重新加载单元格。它的框架会改变。你只需要为依赖于框架约束的单元格设置两种不同的状态,就可以发挥神奇的作用。谢谢你,我会按照你的建议写,如果我愿意的话succeeded@iWheelBuy嗨,我设法听从了你的建议,但我遇到了一个问题。你能看一下吗?
self.faqTableView.reloadData()