Есть ли в UIImageView свойство, указывающее, что setImage завершен и анимации готовы? - PullRequest
0 голосов
/ 11 мая 2011

Просто начинаем работать с Obj-C и iOS-программированием.У меня есть некоторый код, который загружает и imageView в (HIDDEN: YES) UIView - просто

[bgImageView setImage:[UIImage imageNamed:@"Filename.jpg"];

Код затем устанавливает и фиксирует анимацию для fgImageView и bgImageView.Поскольку некоторые изображения могут быть большими, иногда анимация из нового bgImage не отображается с новым фоновым изображением, а вместо этого «останавливается и отображается».Обратите внимание, что остановка не происходит во время setImage.Это происходит во время второго animationCommit позже в коде.Поскольку animationCommit заставляет приложение ждать, пока анимация этого ImageView не будет завершена.

Я ищу что-то вроде 'setImage commit' в UIImageView,

Я бы предпочелпокажите спиннер, пока изображение не загрузится, затем продолжите анимацию, однако для класса UIImageView, по-видимому, нет свойства isLoaded.

Существует ли простой способ определить, что UIImageView выполняется с помощьюВызов setImage?

Ответы [ 3 ]

1 голос
/ 11 мая 2011

[UIImageView setImage:] не асинхронный: это делается непосредственно перед возвратом сообщения. Если представление не показывает изображение сразу, возможно, это из-за ленивого кода UIImage. Я предполагаю, что [UIImage imageNamed:] просто ссылается на файл в комплекте и загружает его только после запроса данных изображения.

Вы можете попытаться принудительно загрузить изображение, отправив ему сообщение CGImage:

[bgImageView.image CGImage];

Если это по-прежнему не вызывает загрузку изображения, вы должны нарисовать его где-нибудь:

UIGraphicsBeginImageContext((CGSize){1, 1});
[bgImageView drawInRect:(CGRect){{0, 0}, {1, 1}}];
UIGraphicsEndImageContext();
1 голос
/ 11 мая 2011

Меня интересует, что setImage обрабатывается синхронно, тем более что вы говорите о том, как приложение останавливается. Вы бы хотели запустить setImage в NSOperation, чтобы это произошло в фоновом режиме.

http://developer.apple.com/library/ios/#documentation/cocoa/reference/NSOperation_class/Reference/Reference.html

NSInvocationOperation *myOp = [[NSInvocationOperation alloc] initWithTarget:myImageView selector@selector(setImage:) object:aUIImage];
[myOp addObserver:(NSObject *)self forKeyPath:(NSString *) @"isFinished" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:NULL];
[anOpQueue addOperation:myOp];

Затем вы выполняете операцию KVO и снимаете там вертушку.

0 голосов
/ 11 мая 2011

В UIImageView есть метод - (BOOL)isAnimating, поэтому вы могли бы потенциально использовать:

if (![bgImageView isAnimating]) {
    // continue to next image;
}

Достаточно ли этого или выполняется другая анимация, которая дает ложные ответы?

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