我有一个可以旋转的应用程序,所以我需要处理纵向和横向方向。此外,将允许用户使用捏合手势来更改视图的比例。这是视图的基本层次结构。
mainView是self.view的子视图(来自主视图控制器的上下文)。它是一个UIImageView,虽然它的图像部分相对不重要。在任何情况下,这是该讨论中其余视图作为子视图放置的视图。
首先是我称之为董事会。它是用户组装项目的视图。这些项目本身就是图像视图。
此外,还有我称之为调色板的东西。这些只是可以由用户调整大小和缩放的视图。此外,刚才提到的图像视图可以从一个调色板拖到另一个调色板或板上。调色板可以被认为是用户的工作空间。当他们完成工作后,他们将组件放在板上。
到目前为止,我一直在使用应用程序,其中主板是autolayout的一部分,但调色板是按照需要以编程方式创建的。这很好,因为当用户旋转设备时,自动布局会自动适当地放置电路板。至少它确实存在,直到我想为其添加缩放比例。
Autolayout在界面构建器中设置了以下约束: 前导,上限,尾随和底部均设置为superview默认值。
当用户缩放视图时,结果是它会粘在屏幕的左上角。我宁愿让它保留中心。
我尝试通过将以下代码添加到此视图的捏合手势识别器来以编程方式更改此内容:
if (self.pinchView.tag == TAGBOARD) {
[NSLayoutConstraint constraintWithItem:self.pinchView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.mainView
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
}
但这似乎什么都不做。我猜它是因为它与IB约束冲突。还有什么我可以用autolayout来完成这项工作吗?或者我应该像编程其他视图那样以编程方式完成所有操作?
在此代码示例中,self.pinchView是应用捏合手势的视图。为了这个讨论,我称之为董事会。 self.mainView视图是它的超级视图。
答案 0 :(得分:1)
我们在代码中没有看到的部分类似于
[self.pinchView addConstraint:yourNewConstraint];
我可以看到您创建约束的位置,但不能将其添加到视图中。如果您希望约束获胜,则需要删除其他视图或确保新约束具有更高的优先级。
如果您的视图应居中,请尝试调整故事板中的约束以将宽度和高度固定为默认值,然后在中心水平对齐。这应该满足autolayout并复制你想要添加的内容,然后在你的pinch识别器中你可以改变宽度和高度的常量。务必将宽度和高度限制拖到控制器中以创建插座,以便在捏合手势期间调整它们。