5

我正在开发一款 iPad 应用程序,它可以让你在智能房屋的原型中控制不同的东西。例如,它可以让您打开和关闭灯。为此,我制作了一个UIImageView显示房子的平面图并添加UIButtons为每个可以切换的灯的子视图。

在此处输入图像描述

setFrame如您所见,使用each 的方法将按钮完美地放置在平面图上UIButton。但是,当我将 iPad 旋转到纵向时,会发生以下情况:

在此处输入图像描述

这些按钮显然仍然具有相同的来源,但它与图像的重新定位无关。

平面图图像具有以下支柱和弹簧设置:

在此处输入图像描述

并将其内容模式设置为Aspect Fit.

我的问题是

如何动态重新定位每个UIButton,使其具有相同的相对位置。我想我必须在{did/should}AutorotateToInterfaceOrientation委托方法中处理这个问题。

应该注意的UIImageView是,它是可缩放的,为了解决这个问题,我实现了scrollViewDidZoom委托方法,如下所示:

for (UIView *button in _floorPlanImage.subviews) {       
    CGRect oldFrame = button.frame;
    [button.layer setAnchorPoint:CGPointMake(0.5, 1)];
    button.frame = oldFrame;
    button.transform = CGAffineTransformMakeScale(1.0/scrollView.zoomScale, 1.0/scrollView.zoomScale);
}

先感谢您!

4

1 回答 1

1

我发现布局子视图的最佳方法是在- (void) layoutSubviews方法中。您必须继承您的 UIImageView 并覆盖该方法。

每当你的框架发生变化时,这个方法就会自动被调用,并且在你的视图第一次出现时也会被调用。

如果你把你所有的布局代码放在这个方法中,它可以防止布局碎片和重复,将你的视图代码保留在你的视图中,并且大多数事情都默认工作。

于 2012-06-25T03:55:42.390 回答