将 UIView 移动到新的超级视图并从 UITableViewCell 再次返回

Posted

技术标签:

【中文标题】将 UIView 移动到新的超级视图并从 UITableViewCell 再次返回【英文标题】:Moving UIView to new superview and back again from UITableViewCell 【发布时间】:2015-04-20 13:57:06 【问题描述】:

我有一个自定义的UITableViewCell,其中有一个自定义的UIView。当有人按下UITableViewCell 时,UIView 将作为子视图转移到新的UIWindow。然后当UIWindow 被解雇时,我需要将UIView 转移回选定的UITableViewCell。 我试过使用这段代码:

(self.tableView.cellForRowAtIndexPath(self.tableView.indexPathForSelectedRow()!) as! ContentTableCell).replaceControls(self.expandedViewController.Controls)

其中replaceControls() 是我的自定义表格单元格中的一个函数,它将给定视图添加为子视图并将其连接到适当的@IBOutletself.expandedViewController.Controls 是自定义的UIView

但是这不起作用并产生错误CGAffineTransformInvert: singular matrix

【问题讨论】:

为什么要移动视图?为什么不运行一个让视图看起来像移动的动画? 【参考方案1】:

使用hidden 函数和CATrasition 将所有应该设置在两个视图中的对象放在一个视图中怎么样?

例如,您使用@IBAction fun flipViews() 创建UIButton 的实例。并且您应该在您的viewDidLoad()storyboard 中设置应该在BackSideView 中设置的对象hidden

func flipViews() UIView.beginAnimations("ViewSwitch", context: nil) UIView.setAnimationDuration(0.6) UIView.setAnimationCurve(.EaseInOut) if backSideObject1.hidden frontSideObject1.hidden = true frontSideObject2.hidden = true frontSideObject3.hidden = true backSideObject1.hidden = false backSideObject2.hidden = false backSideObject3.hidden = false else frontSideObject1.hidden = false frontSideObject2.hidden = false frontSideObject3.hidden = false backSideObject1.hidden = true backSideObject2.hidden = true backSideObject3.hidden = true UIView.setAnimationTransition(.FlipFromLeft, forView: view, cache: true) UIView.commitAnimations()

希望我的回答能帮到你。

【讨论】:

以上是关于将 UIView 移动到新的超级视图并从 UITableViewCell 再次返回的主要内容,如果未能解决你的问题,请参考以下文章

如何在超级视图中定位 UIView?

如何将 UIView 的光栅化内容复制到新的 UIView 中?

限制超级视图内的视图

将表格视图单元格从一个表格视图移动到新的表格视图

将数据从集合视图单元格移动到新的集合视图单元格

如何将表格视图单元格从一个表格视图移动到新的表格视图