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

Ios 为什么在NSTimer无效后对象会重置?,ios,uiimageview,nstimer,Ios,Uiimageview,Nstimer,我有一个NSTimer,它调用一个函数来移动一些UIImageView,当我使NSTimer无效时,我以为UIImageView会在它们的位置停止,但它们会重置到情节提要设置的位置 我是否做错了什么,或者没有包括在内,或者这是一个谜 编辑-添加了一些代码 h m 如果使用自动布局,当重新应用约束时(可以由无害事件触发,例如设置标签的text属性),所有内容都将放回故事板中嵌入的约束定义的位置(假设您试图通过编程方式移动UIImageView对象,只需更改其frame或center属性,而不是更改

我有一个
NSTimer
,它调用一个函数来移动一些
UIImageView
,当我使
NSTimer
无效时,我以为
UIImageView
会在它们的位置停止,但它们会重置到
情节提要设置的位置

我是否做错了什么,或者没有包括在内,或者这是一个谜

编辑-添加了一些代码

h

m


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

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

  • 通过更改约束的
    常量
    属性,然后调用父视图的
    layoutIfNeeded
    方法,而不是更改
    UIImageView
    本身的
    中心
    属性,来移动
    UIImageView
    对象。如果在界面中然后,为约束本身创建
    IBOutlet
    引用

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


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

    你能给我们看一些代码吗?我不认为这很有必要,但可以。我怀疑控件的移动回到他们原来的位置与计时器无关,而是通过使用自动布局和重新应用的约束。你使用自动布局吗?这就是诀窍,我真的很讨厌iPhone 5的新屏幕大小…现在开发东西让人很痛苦。
    NSTimer *updater;
    
    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];
    }