2

我有一个NSTimer调用移动一些UIImageView's 的函数,当我使 's 无效时,NSTimer我认为UIImageView's 会停在它们的位置,但它们重置为StoryBoard.

有什么我做错或不包括的事情,还是这是一个谜?

编辑 - 添加了一些代码

。H

NSTimer *updater;

.m

updater = [NSTimer scheduledTimerWithTimeInterval:1.0f/32.0f target:self selector:@selector(gameEngine) userInfo:nil repeats:YES];


-(void)gameEngine {
    //move some images around
}

-(IBAction)action {
    [updater invalidate];
}
4

1 回答 1

1

如果您使用自动布局,当重新应用约束时(可能由无害的事件触发,例如设置text标签的属性),所有内容都将放回到由嵌入的约束定义的位置故事板(假设您试图以UIImageView编程方式简单地通过更改对象framecenter属性而不是更改约束来移动对象)。

您可以通过以下两种方式之一解决此问题。

  1. 通过更改约束的属性然后调用父视图的方法来移动UIImageView对象,而不是更改本身的或属性。如果在 Interface Builder中为约束本身创建引用,这可以简化。constantlayoutIfNeededframecenterUIImageViewIBOutlet

  2. 关闭自动自动布局,然后您可以使用frameorcenter属性,就像我怀疑您目前使用的那样。您可以通过打开故事板、单击最右侧面板中的第一个选项卡并取消选中“使用自动布局”来关闭自动布局:

    在此处输入图像描述

第一种方法有点麻烦,而第二种方法可能看起来更简单,但自动布局是 iOS 开发的未来,通过约束来掌握控件的移动可能是值得的。

于 2013-07-05T18:36:55.277 回答