我有一个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];
}
答案 0 :(得分:1)
如果您正在使用自动布局,当重新应用约束(可以由无害事件触发,例如设置标签的text
属性)时,所有内容都将被放回到它们的位置由故事板中嵌入的约束定义(假设您只是通过更改其UIImageView
或frame
属性而不是通过更改约束来尝试以编程方式移动center
个对象。
您可以通过以下两种方式解决此问题。
通过更改约束的UIImageView
属性然后调用父视图的constant
方法来移动layoutIfNeeded
对象,而不是更改frame
或center
本身的UIImageView
属性。如果在Interface Builder中为约束本身创建IBOutlet
引用,则可以简化此操作。
关闭自动自动布局,然后您可以使用我怀疑您当前的frame
或center
属性。您可以通过打开故事板,单击最右侧面板中的第一个选项卡,然后取消选中“使用Autolayout”来关闭自动布局:
第一种方法稍微麻烦一点,虽然第二种方法看起来更容易,但自动布局是iOS开发的未来,通过约束来掌握控件的移动可能是值得的。