Как отключить анимацию для кода, вложенного в блок анимации UIView? - PullRequest
8 голосов
/ 26 сентября 2011

Есть метод, который вызывается внутри блока анимации сторонним API. В этом методе я должен построить несколько подпредставлений. Но в этом случае я не хочу, чтобы анимация происходила при создании подпредставлений.

Есть ли способ сказать "[UIView dontAnimateFromHere] ... [UIView nowYouMayAnimateAgain]"?

Ответы [ 2 ]

19 голосов
/ 26 сентября 2011

Да, действительно, такой способ есть. Это так:

[UIView setAnimationsEnabled:NO];
// Animations happen here
[UIView setAnimationsEnabled:YES];

... это отключит как анимации UIView, запускаемые с помощью блоков, так и анимации, запускаемые с использованием старых методов begin / end.

Тем не менее, я предполагаю, что ваша сторонняя библиотека предварительно скомпилирована, в противном случае вы можете изменить исходный код напрямую: конечно, возможно, что он делает что-то странное и анимирует по-другому, поэтому ваш пробег может варьироваться в зависимости от этого решения.

Это не отключит изменения, вносимые в блоки анимации: они просто произойдут немедленно. В противном случае вы рискуете совершить плохие вещи, поскольку ваш сторонний API будет делать предположения о том, где могут быть представления, которые не соответствуют действительности.

6 голосов
/ 28 апреля 2014

Для iOS 7 и более поздних версий есть UIView's + executeWithoutAnimation: .

Обратите внимание, что performWithoutAnimation полезен для немедленного выполнения изменения, пока вы находитесь в блоке анимации, но не отключает вызовы анимации, сделанные во вложенном блоке, поэтому используйте его для удобства, но он не такой надежный, как setAnimationsEnabled оригинального ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...