Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用RxSwift在可扩展单元上制作平滑动画_Ios_Swift_Animation_Rx Swift - Fatal编程技术网

Ios 如何使用RxSwift在可扩展单元上制作平滑动画

Ios 如何使用RxSwift在可扩展单元上制作平滑动画,ios,swift,animation,rx-swift,Ios,Swift,Animation,Rx Swift,我有创建可扩展表视图单元格这样的常规任务。 由于我的模块是使用RxSwift编写的,所以我决定将此框架用于特定任务。 虽然我的解决方案满足功能需求,但我希望改进UI。到现在为止,当我取消选择我的细胞时,我有非常粗糙的动画 我的布局如下所示: TableViewCell -ContentView --StackView ---MainView ---ExandableView 因此,当我点击一个单元格时,我的ExpandableView正在建立 class ExpandableCell: UIT

我有创建可扩展表视图单元格这样的常规任务。 由于我的模块是使用RxSwift编写的,所以我决定将此框架用于特定任务。 虽然我的解决方案满足功能需求,但我希望改进UI。到现在为止,当我取消选择我的细胞时,我有非常粗糙的动画

我的布局如下所示:

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()