1

我有一个可以旋转的应用程序,所以我需要处理纵向和横向。此外,用户将被允许使用捏合手势来改变视图的比例。这是视图的基本层次结构。

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 视图是它的父视图。

4

1 回答 1

1

我们在代码中没有看到的部分类似于

[self.pinchView addConstraint:yourNewConstraint]; 

我可以看到您创建约束的位置,但不能将其添加到视图中。如果您希望您的约束获胜,您需要删除其他视图或确保新约束具有更高的优先级。

如果您的视图应该居中,请尝试调整情节提要中的约束以将宽度和高度固定为默认值,然后在中心水平对齐。这应该满足自动布局并复制您要添加的内容,然后在您的捏识别器中,您可以更改宽度和高度的常数。确保将您的宽度和高度约束拖到控制器中以创建一个出口,以便您可以在捏合手势期间调整它们。

于 2013-05-29T19:03:16.447 回答