表格视图中的 UIView 转换

Posted

技术标签:

【中文标题】表格视图中的 UIView 转换【英文标题】:UIView Transition in table view 【发布时间】:2015-10-27 14:34:59 【问题描述】:

我想在表格视图单元格内转换视图。更准确地说,当用户单击 UITableViewCell 中的按钮时,视图应从单元格的右侧滑入,并且当用户单击滑动视图中的按钮时,该视图应滑回其原始位置。除了将滑动视图发送回其原始位置的动画之外,我可以完成所有这些操作。

为了实现这一点,我到目前为止所做的是,为表格视图单元格创建了一个 xib 文件,其中包含并排的两个视图,让它是 view1 和 view2。当 tableview 加载到屏幕时,只有 view1 对用户可见。并将 view1.trailingedge 和 view2.leadingedge 的自动布局约束设置为 0,该约束连接到 cell.swift 并命名为 leftConstraint。现在,当单击 view1 中的按钮时,view2 使用以下代码从单元格的右侧滑入:-

self.view2.transform = CGAffineTransformMakeTranslation(UIScreen.mainScreen().bounds.width, 0)
UIView.animateWithDuration(0.4, animations:  () -> Void in
    self.view2.transform = CGAffineTransformIdentity
    self.leftConstraint.constant -= UIScreen.mainScreen().bounds.width
)

当试图将 view2 发送回其旧位置时(这应该发生在单击 view2 中的按钮时),即。单元格动画的右侧不起作用,view2 中的所有元素都消失了。使用以下代码将视图发送到单元格的右侧:-

self.view2.transform = CGAffineTransformMakeTranslation(UIScreen.mainScreen().bounds.width, 0)
UIView.animateWithDuration(0.4, animations:  () -> Void in
   self.view2.transform = CGAffineTransformIdentity
   self.leftConstraint.constant += UIScreen.mainScreen().bounds.width
)

在此先感谢您的帮助。特别感谢@MarkHim 的帮助。

【问题讨论】:

【参考方案1】:

由于您需要对 rightOut 位置进行两次转换,第一次用于 in-animation,然后用于 out 动画,您可以将其保存在像 rightOutTransform 这样的变量中。试试:

CGAffineTransform rightOutTransform = CGAffineTransformMakeTranslation(self.view.fame.size.width, 0);
// assuming view2 is currently in the cell
UIView.animateWithDuration(0.4, animations: 
   self.view2.transform = rightOutTransform //
)

您可能想要考虑在动画完成时从视图层次结构中删除不再需要的视图

view2.removeFromSuperview();

【讨论】:

再次感谢马克,很抱歉回复晚了,我会检查这个并更新线程! :)

以上是关于表格视图中的 UIView 转换的主要内容,如果未能解决你的问题,请参考以下文章

UIView中的坐标转换

iOS UIView中的坐标转换

iOS UIView中的坐标转换

如何将 UITableViewCell 的内容视图转换为 Interface Builder 中的普通 UIView?

iOS开发笔记--UIView中的坐标转换

子类化的 UIView,当设置为 Storyboard 中的默认视图时,编译器无法识别而不进行强制转换