如何在不丢失自动布局的情况下重新定位ImageView?

时间:2014-10-12 13:59:30

标签: ios objective-c uiimageview xcode6

我在Xcode 6中创建了一个单一的视图应用程序游戏。我创建了一个UIImageView并在我的.h文件中将其声明为* sphere

    IBOutlet UIImageView *sphere;

然后在我的.m文件中,当一个对象与它相交时,我使用下面的代码将它放在一个随机位置。

-(void)PlaceSphere{

sphereX = arc4random() %492;
sphereX = sphereX + 34;
sphereY = arc4random() %249;
sphereY = sphereY + 39;

sphere.center = CGPointMake(sphereX, sphereY);

}

//进一步向下

    if(CGRectIntersectsRect(_ball.frame, sphere.frame)){
    [self PlaceSphere];

然而,我的问题是在iOS8中,使用自动布局...当球体移动到另一个位置时,它将闪烁到新位置,然后移回故事板上的原始位置。我该如何解决这个问题?

我也可以通过我的球来体验这一点,这个球在原始球闪烁在故事板上的地方移动。有没有办法解决这个问题,仍然使用自动布局?

谢谢

我现在没有自动布局工作,使用iPhone 6的模拟器看起来很好......如果我只有一个视图应用程序,只要我使用自动调整大小,我的自动布局就更重要了选项?

1 个答案:

答案 0 :(得分:1)

您可以在代码中为约束创建插座,就像任何其他界面元素一样。您可以在代码中更改其值以定位视图。

所以要做到这一点,你的视图应该有x和y位置约束(超前视图的前导空间,例如superview的顶部空间)。您可以在故事板中选择约束,就像它们是视图一样,并在视图控制器代码中为它创建出口:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topConstraint;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *leftConstraint;

现在您可以使用“常量”属性更改值:

self.topConstraint.constant = 39 + (arc4random() %249);

还有其他方法可以做到这一点,但对我来说,如果您使用自动布局,这是最好的方法。


至于你的另一个问题,“我使用自动布局是否重要?”,这是个人选择!但对我来说这是值得的,因为它可以更容易地支持横向模式和不同屏幕尺寸的设备。