Autolayout搞砸了我的动态影像

时间:2016-03-29 06:04:09

标签: ios objective-c iphone ipad autolayout

我完成了一个成功的应用程序,我正在尝试使其与所有设备大小兼容。问题是,当我尝试自动布局方法时,会出现问题。

我正试图用以下方式移动图像:

IMAGENAME.center = CGPointMake(IMAGENAME.center.x, IMAGENAME.center.y + 10);

然后我还有许多其他的图像也向下移动,就像你必须抓住落下的水果一样。现在,这是问题所在。打开自动布局后,当一个水果击中地面或我在游戏中抓住它时,其他水果,包括击中的水果,传送回原来开始的地方,而不是移动到我设置它们的坐标例如,使用此代码。

if (CGRectIntersectsRect(IMAGENAME.frame, Basket.frame) {

     IMAGENAME.center = CGPointMake(600, 200);
}

这是图像应该去的位置,但自动布局可以防止这种情况发生。但是我想让它变得普及,而且我找不到另一个支持“旧方法”的教程,那么有人可以告诉我如何处理autolayout或告诉我如何在没有autolayout的情况下使其成为通用的吗?

2 个答案:

答案 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];