Я использую несколько различных блоков, которые выглядят как в следующем примере:

        [UIView setAnimationsEnabled:NO];
        ...
        [UIView setAnimationsEnabled:YES];

Насколько я понимаю, они могут вызываться в фоновом потоке, и я должен предотвратить смешивание команд отключения / включения. Как это сделать правильно?

0
Vyachaslav Gerchicov 5 Мар 2015 в 12:55

2 ответа

Лучший ответ
  • (void) setAnimationsEnabled: (BOOL) enabled Описание Устанавливает, включена ли анимация. По умолчанию анимация включена. если ты отключить анимацию, код внутри последующих блоков анимации все еще выполняется, но на самом деле анимации не происходит. Таким образом, любые внесенные вами изменения внутри блока анимации отражаются немедленно, а не анимированные. Это верно независимо от того, используете ли вы блочную анимацию. методы или методы анимации начала / фиксации. Этот метод влияет на только те анимации, которые отправляются после его вызова. если ты вызовите этот метод во время работы существующих анимаций, анимация продолжается до тех пор, пока не достигнет своей естественной конечной точки.

В документации для setAnimationsEnabled ничего не говорится о фоновом потоке. Фактически, все операции пользовательского интерфейса в iOS должны выполняться в основном потоке.

Итак, отвечая на ваш вопрос, единственное, с чем вам нужно быть осторожным, - это вызывать метод setAnimationsEnabled в основном потоке.

Если вы хотите выполнять разные блоки анимаций в разные моменты, проще использовать:

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0
0
Pauls 5 Мар 2015 в 10:28

Операции UIKit не могут выполняться в фоновых потоках. Их можно сделать только в основном потоке. т.е. анимация может быть включена / отключена только в основном потоке. Не могли бы вы подробнее рассказать о сценарии использования?

0
jarora 5 Мар 2015 в 10:13