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