我有一个 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];
}
Best Answer-推荐答案 strong>
如果您使用自动布局,当重新应用约束时(可以由无害的事件触发,例如设置标签的 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/
|