【发布时间】:2013-05-24 19:11:24
【问题描述】:
我有一个可以旋转的应用程序,所以我需要处理纵向和横向方向。此外,用户将被允许使用捏合手势来改变视图的比例。这是视图的基本层次结构。
mainView 是 self.view 的子视图(来自主视图控制器的上下文)。它是一个 UIImageView,虽然它的图像部分相对不重要。无论如何,这是本次讨论中的其余视图作为子视图放置在其中的视图。
第一个是我所说的董事会。它是用户组装哪些项目的视图。这些项目本身就是图像视图。
此外,还有我所说的调色板。这些只是可以由用户调整大小和缩放的视图。此外,刚刚提到的图像视图可以从一个调色板拖到另一个调色板或板上。调色板可以被认为是用户的工作空间。完成工作后,他们将组件放在板上。
到目前为止,我一直在使用该应用程序,其中板是自动布局的一部分,但调色板是根据需要以编程方式创建的。这很好,因为当用户旋转设备时,自动布局会自动适当地放置电路板。至少在我想为其添加捏缩放之前它确实如此。
自动布局在界面生成器中设置了以下约束: 前导、顶部、尾随和底部都设置为超级视图默认值。
当用户缩放视图时,结果是它有点粘在屏幕的左上角。我宁愿让它保留中心。
我尝试通过将以下代码添加到此视图的捏合手势识别器来以编程方式更改此设置:
if (self.pinchView.tag == TAGBOARD) {
[NSLayoutConstraint constraintWithItem:self.pinchView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.mainView
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
}
但这似乎无济于事。我猜这是因为它与 IB 约束冲突。我还能做些什么来使用自动布局来完成这项工作吗?还是应该像处理其他视图一样以编程方式完成所有操作?
在此代码示例中,self.pinchView 是应用了捏合手势的视图。为便于讨论,我将其称为董事会。 self.mainView 视图是它的父视图。
【问题讨论】:
-
我在想我想要做的事情在约束条件下是不可能的,因为确定大小所需的部分内容来自用户捏合手势。自动布局中的约束必须完全指定大小和位置。除非有办法从捏合手势数据中传递部分数据,否则我认为我做不到。
-
查看您的代码 sn-p 我猜您忘记将此约束添加到您的视图中。我说的对吗?
-
我没有忘记。在出现捏合手势之前,它是不相关的。基本上,其他四个约束作为默认约束,然后我希望这个新手势能够取代它们,如果可能的话。以编程方式管理视图是一项繁重的工作,因为我有手势识别器和其他未附加的东西。 @Robert,如何在 IB 中添加这样的约束?我没有看到任何菜单项来添加约束。我觉得我在那里遗漏了一些基本的东西,但是查看参考资料并没有结果。
标签: ios6 autolayout