Почему объекты сбрасываются после аннулирования NSTimer?
У меня есть NSTimer
который вызывает функцию, которая перемещает некоторые UIImageView
х, когда я признаю недействительным NSTimer
Я думал UIImageView
будет останавливаться на их местах, но они сбрасываются на место, установленное StoryBoard
,
Есть ли что-то, что я делаю неправильно или нет, или это загадка?
РЕДАКТИРОВАТЬ - добавил код
.час
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];
}
1 ответ
Если вы используете автоматический макет, когда ограничения повторно применяются (что может быть вызвано безобидными событиями, такими как установка text
свойства метки), все будет возвращено туда, где они были определены ограничениями, встроенными в раскадровку (при условии, что вы пытались переместить UIImageView
объекты программно, просто изменив их frame
или же center
свойства, а не путем изменения ограничений).
Вы можете решить это одним из двух способов.
Переместить ваш
UIImageView
объекты путем измененияconstant
свойство для ограничения, а затем вызовlayoutIfNeeded
метод родительского представления, а не изменениеframe
или жеcenter
свойстваUIImageView
сам. Это можно упростить, если в Интерфейсном Разработчике вы создадитеIBOutlet
ссылки на сами ограничения.Выключите авто-макет, а затем вы можете использовать
frame
или жеcenter
свойства, как я подозреваю, вы в настоящее время. Вы можете отключить автоматическое расположение, открыв раскадровку, щелкнув первую вкладку в самой правой панели и сняв флажок "Использовать автоматическое расположение":
Первый подход немного более обременителен, и, хотя второй подход может показаться более простым, автоматическое размещение - это будущее разработки iOS, и, возможно, стоит освоить перемещение элементов управления с помощью ограничений.