将 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()
是我的自定义表格单元格中的一个函数,它将给定视图添加为子视图并将其连接到适当的@IBOutlet
。 self.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 再次返回的主要内容,如果未能解决你的问题,请参考以下文章