我有一个 NSTimer
,它调用一个移动一些 UIImageView
的函数,当我使 NSTimer
无效时,我认为 UIImageView
会停在它们的位置,但它们会重置到 StoryBoard
设置的位置。
我做错了什么或没有包括或这是一个谜?
编辑 - 添加了一些代码
.h
NSTimer *updater;
.m
updater = [NSTimer scheduledTimerWithTimeInterval:1.0f/32.0f target:self selectorselector(gameEngine) userInfo:nil repeats:YES];
-(void)gameEngine {
//move some images around
}
-(IBAction)action {
[updater invalidate];
}
如果您使用自动布局,当重新应用约束时(可以由无害的事件触发,例如设置标签的 text
属性),所有内容都将被放回到 Storyboard中嵌入的约束定义它们的位置(假设您试图以编程方式移动 UIImageView
对象,只需更改它们的 frame
或 center
属性而不是通过更改约束)。
您可以通过以下两种方式之一解决此问题。
通过更改约束的 constant
属性然后调用父 View 的 layoutIfNeeded
方法来移动您的 UIImageView
对象,而不是而不是更改 UIImageView
本身的 frame
或 center
属性。如果在 Interface Builder 中为约束本身创建 IBOutlet
引用,这可以简化。
关闭自动自动布局,然后你可以使用 frame
或 center
属性,我怀疑你现在是这样。您可以通过打开 Storyboard、单击最右侧面板中的第一个选项卡并取消选中“使用自动布局”来关闭自动布局:
第一种方法有点麻烦,而第二种方法可能看起来更容易,但自动布局是 iOS 开发的 future ,通过约束来掌握控件的移动可能是值得的。
关于ios - 为什么 NSTimer 失效后对象会重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17494665/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) | Powered by Discuz! X3.4 |