为什么在NSTimer失效后对象会重置?

时间:2013-07-05 18:09:07

标签: ios uiimageview nstimer

我有一个NSTimer调用一个移动一些UIImageView的函数,当我使NSTimer无效时我认为UIImageView会停在他们的位置,但它们会重置为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];
}

1 个答案:

答案 0 :(得分:1)

如果您正在使用自动布局,当重新应用约束(可以由无害事件触发,例如设置标签的text属性)时,所有内容都将被放回到它们的位置由故事板中嵌入的约束定义(假设您只是通过更改其UIImageViewframe属性而不是通过更改约束来尝试以编程方式移动center个对象。

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

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

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

    enter image description here

  3. 第一种方法稍微麻烦一点,虽然第二种方法看起来更容易,但自动布局是iOS开发的未来,通过约束来掌握控件的移动可能是值得的。