移动子视图时,如何将其子视图保留在其父视图中的同一位置?

Posted

技术标签:

【中文标题】移动子视图时,如何将其子视图保留在其父视图中的同一位置?【英文标题】:When moving a subview around, how do I keep a subview of it in the same place in its superview? 【发布时间】:2013-05-31 16:06:19 【问题描述】:

这是一个非常复杂的标题。对不起。

基本上,我有一个UIView,我已将它附加到UITableViewCell,这样我就可以四处滑动单元格,或者至少创建它的tric--幻觉。在那个UIView 中,我有一个UIImageView。我想保持这个UIImageView 相对于视图控制器的静态。所以基本上当我滑动单元格时,我希望单元格的所有内容都可以用我的手指滑动(我已经完成了)除了UIImageView。我希望它在用户看来好像它停留在一个地方 - 这意味着对于单元格的超级视图(视图控制器的视图)它停留在一个地方。

构建这个最简单的方法是什么?很抱歉我没有要分享的代码,我只是想先从概念层面构建它。我在UITableViewCell 上的UIViewUIPanGestureRecognizer 滑动,如果有帮助,可以移动UIView 的框架。

当它移动时,我是否必须将它向与UIView 的相反方向移动(比如它在 x 中向前移动一个,在 x 中向后移动它?)或者有什么方法可以让我说“锁定您相对于您的超级视图的位置”?

【问题讨论】:

你需要向相反的方向移动它。应该没那么难,因为您已经实现了 UIPanGestureRecognizer。 我下面的回答对你有用吗?请让我知道,您还使用什么库来实现此滑块功能?还是你自己做的? 【参考方案1】:

我以前也遇到过同样的问题.. 我所做的只是不将UIImageView 作为子视图添加到UITableViewCell,而是将其附加到UITableViewCell 的父级.. 无论如何发生在UITableViewCell 框架属性(即大小或原点)不会影响您的UIImageView..

您可能想知道:我将 UIImageView 作为子视图附加到 tableCell 的原因之一是 b/c 它以许多不同的方式与之相关。对此的回应是您可以通过objc_setAssociatedObject

如果你有网络开发背景,你可以把这个讨论看作是position:absoluteposition:relative 讨论的区别。

最初我尝试按照您的想法进行操作,基本上将它们朝相反的方向移动等。我只是认为我的解决方案要简单得多。

【讨论】:

这听起来不错,但是作为一个table view cell,你不还是想让图片随着table的滚动而上下移动吗?也许您可以让手势识别器移动 contentView 并且图像是表格视图单元格(contentView 的姐妹)的直接子级。 @morningstar 确定你是对的.. 我不确定确切的安排(我必须测试一下我会将 UIImageView 附加到哪个视图),但我的想法是以某种方式将 UIImage 视图与 UITableView 解耦..【参考方案2】:

abood 很接近,但是很接近,但是如果您只是将 imageview 设置为单元格本身的子视图,而不是我在单元格上添加的 UIView,它们会独立运行。因此,与第一行相反,将其添加为 UITableViewCell 的子视图效果很好,并且没有列出任何问题。现在完美运行。

【讨论】:

天啊!如果我很接近,那么至少给我一个赞成票!大声笑

以上是关于移动子视图时,如何将其子视图保留在其父视图中的同一位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何将子视图从其父视图的父视图置于顶部

如何在自定义视图中将子视图的框架设置为其父框架

如何在其父视图之上添加子视图中的视图?

如何检测拖动到那里的子视图中的触摸(或获取哪个子视图位于其父视图中的点击下方的最快方法)

调用触摸手势事件时如何检查其父视图或子视图?

在 OSX 中将子视图拖到超级视图之外