Использование UIImageView для анимации флипбука на iphone - PullRequest
0 голосов
/ 16 мая 2010

Я использую UIImageView для запуска анимированного флипбука следующим образом:

mIntroAnimFrame = [[UIImageView alloc] initWithFrame:CGRectMake( 0, 0, 480, 320);
mIntroAnimFrame.image = [UIImage imageNamed:@"frame0000.tif"];

Обычно, когда я определяю время, я переворачиваю изображение, просто вызывая:

mIntroAnimFrame.image = [UIImage imageNamed:@"frame0000.tif"];

снова с правой рамкой. Должен ли я делать это по-другому? Являются ли повторные вызовы для установки изображения таким образом, возможно, затопляет основную память, или каждый вызов по существу освобождает предыдущий UIImage, потому что ничто другое не ссылается на него? Я подозреваю, что последнее верно.

Кроме того, существует ли простой способ предварительной загрузки изображений? Кажется, что время от времени анимация замедляется. Должен ли я просто загрузить все изображения в фиктивный массив UIImage, чтобы они были предварительно загружены, а затем обратиться к нему, когда я хочу показать его, с помощью mIntroAnimFrame.image = mPreloadedArray [i];

Ответы [ 2 ]

2 голосов
/ 16 мая 2010

Я печатал пример, но вспомнил, что был идеальный на http://www.iphoneexamples.com/

NSArray *myImages = [NSArray arrayWithObjects:
    [UIImage imageNamed:@"myImage1.png"],
    [UIImage imageNamed:@"myImage2.png"],
    [UIImage imageNamed:@"myImage3.png"],
    [UIImage imageNamed:@"myImage4.gif"],
    nil];

UIImageView *myAnimatedView = [UIImageView alloc];
[myAnimatedView initWithFrame:[self bounds]];
myAnimatedView.animationImages = myImages;
myAnimatedView.animationDuration = 0.25; // seconds
myAnimatedView.animationRepeatCount = 0; // 0 = loops forever
[myAnimatedView startAnimating];
[self addSubview:myAnimatedView];
[myAnimatedView release]; 

Это было то, о чем ты думал?

0 голосов
/ 16 мая 2010

[UIImage imageNamed:] будет кэшировать изображения, поэтому они не будут немедленно освобождены. В этом нет ничего плохого, но если вы знаете, что некоторое время не будете использовать изображение снова, используйте другой метод для получения изображений.

UIImageView также имеет встроенные возможности анимации, если у вас есть регулярная частота кадров.

mIntroAnimFrame.animationImages = mPreloadedArray;
[mIntroAnimFrame startAnimating];
...