【问题标题】:Autolayout messing up my moving images自动布局弄乱了我的动态图像
【发布时间】:2016-07-16 13:17:43
【问题描述】:

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

我正在尝试移动图像:

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

然后我还有很多其他的图像也在向下移动,就像你必须抓住落下的水果一样。现在,问题来了。打开自动布局后,当一个水果落在地上或我在游戏中用篮子接住它时,其他水果,包括击中的那个,会传送回它们最初开始的位置,而不是移动到我设置的坐标以使用此代码为例。

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

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

这是图像应该去的位置,但自动布局阻止了这一点。但是我想让它通用,我找不到另一个支持“旧方式”的教程,所以有人可以告诉我如何使用自动布局或告诉我如何在没有自动布局的情况下使其通用?

【问题讨论】:

    标签: ios objective-c iphone ipad autolayout


    【解决方案1】:

    如果您启用自动布局 没用

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

    【讨论】:

      【解决方案2】:

      如果您使用自动布局,那么您必须一直使用它。
      这意味着不要在代码中操纵框架(这是 .center 所做的)。

      您写道您“打开”了自动布局。
      您是指在 Storyboard 中吗?
      如果它是一个故事板,您必须为相关约束创建 IBOutlet 属性,并将故事板中的约束连接到出口(连同图像视图)。

      无论如何,如果您想使用自动布局并在代码中移动视图,则必须使用约束来完成。
      每个约束都有 constant 属性,您可以在代码中进行更改。
      对于您的情况,为了将图像移动 x 和 y,您必须更改 2 个约束(一个水平和一个垂直)。

      如果您可以方便地操作中心,那么您可以在父约束中创建水平中心,在父约束中创建垂直中心。
      为避免对现有逻辑进行重大更改,您可以根据父级左/上(而不是中心)设置约束。
      这样,constant 的值必须更改为与您在 IMAGENAME.center = CGPointMake(600, 200); 中使用的值完全相同的值 - 而不是这样,您将拥有类似的内容:

      imageHorizontalCenterConstraint.constant = 600;
      imageVerticalCenterConstraint.constant = 200;
      [imageView.superview updateConstraintsIfNeeded];
      

      【讨论】:

        猜你喜欢
        • 2014-11-19
        • 1970-01-01
        • 1970-01-01
        • 2018-04-19
        • 1970-01-01
        • 2013-01-23
        • 2015-08-22
        • 1970-01-01
        • 2021-11-22
        相关资源
        最近更新 更多