移动带有子视图的 UIView

Posted

技术标签:

【中文标题】移动带有子视图的 UIView【英文标题】:Moving a UIView with subviews 【发布时间】:2012-03-05 18:43:50 【问题描述】:

我想要一个带有两个 UIImageView 子视图的视图 (UIView), 然后在屏幕上(同时)移动这两个图像。

在场景 1 中,我创建了一个具有屏幕尺寸的 UIView,并将其固定不变, 然后移动两个子视图的中心点。在场景 2 中,我创建 a UIView 两个图像的大小,然后围绕屏幕移动UIView 中心点。

我原以为最终结果会是一样的,但事实并非如此。 为什么不呢?

场景 1:

UIView mainView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIImageView firstImage = [[UIImageView alloc] initWithFrame:muchSmallerRect];
UIImageView secondImage = [[UIImageView alloc] initWithFrame:muchSmallerRect];
[mainView addSubview:firstImage];
[mainView addSubview:secondImage];
firstImage.center = someSpecificPoint;
secondImage.center = someSpecificPoint;

场景 2:

UIView mainView = [[UIView alloc] initWithFrame:muchSmallerRect];
UIImageView firstImage = [[UIImageView alloc] initWithFrame:muchSmallerRect];
UIImageView secondImage = [[UIImageView alloc] initWithFrame:muchSmallerRect];
[mainView addSubview:firstImage];
[mainView addSubview:secondImage];
mainView.center = someSpecificPoint;

【问题讨论】:

您能否提供更多关于“最终结果的差异”的详细信息? 【参考方案1】:

您说的是两个不同的坐标系。 mainView.center 在包含mainView 的视图的坐标系中表示,而firstView.centersecondView.center 是在mainView 的坐标系中表示的。您当然可以通过移动包含它们的视图将firstViewsecondView 一起移动,但是如果您想获得与移动这两个视图本身相同的结果,则需要在这两个坐标系之间进行转换。

【讨论】:

我曾认为因为muchSmallerRect = CGRectMake(0.0, 0.0, 50.0, 50.0); 和所有视图(主视图和两个子视图 UIIMageViews)的大小相同,所以不同的坐标系会对齐。显然你是对的,因为最终结果差异很大。这是否通过使用 convertPoint:fromView: 更正?

以上是关于移动带有子视图的 UIView的主要内容,如果未能解决你的问题,请参考以下文章

更新 UIView 会产生子视图对齐/Swift 的散列

子视图覆盖了 UITableView 的第一行

带有 nib 子视图的自定义 UIVIew 无

UIView transitionWithView 带有多个xib文件的子视图

Swift 4:防止UIView的子视图移动到它的父节点之外

以编程方式使用自动布局实现带有子视图的 uiview 子类