我完成了一个成功的应用程序,我正在尝试使其与所有设备大小兼容。问题是,当我尝试自动布局方法时,会出现问题。
我正试图用以下方式移动图像:
IMAGENAME.center = CGPointMake(IMAGENAME.center.x, IMAGENAME.center.y + 10);
然后我还有许多其他的图像也向下移动,就像你必须抓住落下的水果一样。现在,这是问题所在。打开自动布局后,当一个水果击中地面或我在游戏中抓住它时,其他水果,包括击中的水果,传送回原来开始的地方,而不是移动到我设置它们的坐标例如,使用此代码。
if (CGRectIntersectsRect(IMAGENAME.frame, Basket.frame) {
IMAGENAME.center = CGPointMake(600, 200);
}
这是图像应该去的位置,但自动布局可以防止这种情况发生。但是我想让它变得普及,而且我找不到另一个支持“旧方法”的教程,那么有人可以告诉我如何处理autolayout或告诉我如何在没有autolayout的情况下使其成为通用的吗?
答案 0 :(得分:0)
如果您使用自动布局,那么您必须一直使用它 这意味着不要在代码中操纵帧(这就是.center所做的)。
你写道,你“开启”了Autolayout 你的意思是在Storyboard中吗? 如果它是故事板,您将必须为相关约束创建IBOutlet属性,并将故事板中的约束连接到出口(连同图像视图)。
无论如何,如果你想使用Autolayout并在代码中移动视图,那么必须使用约束来完成。
每个约束都有constant
属性,您可以在代码中进行更改
对于您的情况,为了通过x和y移动图像,您将不得不更改2个约束(一个水平和一个垂直)。
如果您操作中心很方便,那么您可以在父约束中创建父级和垂直中心的水平中心。
为避免对现有逻辑进行大的更改,您可以根据父左/上(而非中心)设置约束
这样,IMAGENAME.center = CGPointMake(600, 200);
值必须使用与imageHorizontalCenterConstraint.constant = 600;
imageVerticalCenterConstraint.constant = 200;
[imageView.superview updateConstraintsIfNeeded];
中使用的值完全相同的值进行更改 - 而不是这样,您将拥有类似的内容:
{{1}}
答案 1 :(得分:0)
如果启用自动布局 不起作用
1. view.frame = CGRectMake(20, 20, 100, 100)
2. view.center = CGPointMake(150, 50)
需要做的事: 更改视图中心的示例: 水平添加中心并将垂直中心约束添加到Xib或故事板中的视图。在.m文件中将这些约束设为IBOutlet。
更新中心位置如下:
viewCenterHZConstraint.constant = 600;
viewCenterVTConstraint.constant = 200;
[self.view updateConstraintsIfNeeded];