Анимация изображения в первый раз требует много времени для анимации

В моем приложении есть анимация 260 изображений размером 640*1136 файла .jpg. Я загружаю все изображения в массив, как показано ниже.

При нажатии кнопки

- (void)singButtonClick:(id)sender
{
    [self initSingArray];
    [self startAnimationWithImages:singArray duration:2];
}

Он выделит мой массив и загрузит все 260 изображений из папки ресурсов.

self.imageArray = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" inDirectory:nil];


- (void)initSingArray
{
    if (!singArray)
    {
        singArray=[[NSMutableArray alloc] init];

        for(NSString *str in self.imageArray)
        {
            if([[str lastPathComponent] hasPrefix:@"Sing_"])
            {
                [singArray addObject:[UIImage imageNamed:[str lastPathComponent]]];
            }
        }
    }
}

а для анимации изображения просто использовал этот массив и передал его в UIImageView

- (void)startAnimationWithImages:(NSMutableArray*)images duration:(NSTimeInterval)duration
{
    [self startAnimationWithImages:images duration:duration repeatCount:1];
}

- (void)startAnimationWithImages:(NSMutableArray*)images duration:(NSTimeInterval)duration repeatCount:(int)repeatCount
{
    if (self.gifImageView.isAnimating) 
    {
        [self.gifImageView stopAnimating];
    }

    self.gifImageView.animationImages = nil;
    self.gifImageView.animationImages = images;          // Animated image array
    self.gifImageView.animationDuration = duration;      // Perform a full animation when
    self.gifImageView.animationRepeatCount = repeatCount;// Animation number of repetitions
    [self.gifImageView startAnimating];
}

но при нажатии на кнопку В ПЕРВЫЙ раз анимация займет много времени. Она будет работать нормально, когда есть МЕНЬШЕ количество изображений.

Создаст ли размер изображений проблему?

Пожалуйста, помогите мне решить это.

ПРИМЕЧАНИЕ. Я нашел много сообщений, связанных с этими вопросами, но ни один из них не помог мне решить эту проблему.


person Harin    schedule 11.06.2013    source источник
comment
ну, все эти изображения должны быть загружены в память, прежде чем их можно будет отобразить. Когда у вас меньше изображений, этот процесс занимает меньше времени (очевидно). Вы должны предварительно загрузить изображения. Вы говорите, что похожие посты не помогли решить ваши проблемы — почему? Вы не хотите предварительно загружать изображения?   -  person Kreiri    schedule 11.06.2013
comment
@Kreiri: да, я предварительно загружаю все изображения, но при нажатии кнопки для анимации требуется время. и еще одна вещь, когда я нажимаю кнопку «Далее» для другой анимации (загружаю другие изображения в другой МАССИВ), происходит сбой.   -  person Harin    schedule 11.06.2013
comment
И этот второй сбой наверняка из-за того, что у вас закончилась память.   -  person Kreiri    schedule 11.06.2013
comment
@Kreiri: Я думаю, что так и будет. На самом деле я создаю приложение, такое как Говорящий Том, поэтому мне нужно использовать много изображений для анимации. Так что вы можете помочь мне с решением? Спасибо за ответ   -  person Harin    schedule 12.06.2013
comment
Не совсем. Вам придется пересмотреть свой дизайн.   -  person Kreiri    schedule 12.06.2013


Ответы (3)


Вы должны сделать это [self initSingArray]; в viewDidLoad или другом месте, а не по нажатию кнопки. это решит вашу проблему. Причина в вашем случае заключается в том, что массив изображений создается впервые, поэтому для этого требуется время.

person Prateek Prem    schedule 11.06.2013

См. мой ответ на такой же вопрос в imageview-animation-getting-more- память. Суть в том, что вы никогда не заставите свое приложение работать, используя подход animationImages и множество изображений, как у вас. Вам лучше использовать существующее решение, которое уже имеет дело с проблемами памяти и дает возможность избежать декодирования всех данных изображения в память до того, как анимация начнет отображаться (именно поэтому так медленно начинается анимация).

person MoDJ    schedule 01.07.2013

После большого количества исследований и разработок, наконец, я решил эту проблему с помощью сообщения в блоге. Мое приложение успешно работает без сбоев и с быстрым откликом.

Вместо использования UIImageView для анимации Попробуйте этот учебник по решетке Память_использование_на_ios

и код примера упрощенной анимации PNG

Надеюсь, этот ответ поможет кому-то анимировать множество кадров изображений без проблем с утечкой памяти.

person Harin    schedule 24.07.2013