Я сейчас работаю над приложением для iPhone и борюсь с анимацией.
Обычно у меня 109 кадров для перемещения человека по экрану, поэтому я слушаю прикосновения и вычисляю, на какие кадры мне нужно переключиться.
Это все работает хорошо, но через некоторое время у меня возникает утечка памяти, и приложение вылетает. Я загружаю все изображения в массив и массив при запуске и использую UIImageView
для отображения изображений. Изображения загружаются с использованием imageWithContentsOfFile:
.
Какой лучший способ для меня это сделать?
Вот часть исходного кода:
- (void)viewWillAppear:(BOOL)animated {
animationQueue = [[NSMutableArray alloc] initWithObjects:0];
imageArray = [[NSMutableArray alloc] initWithObjects:nil];
for(int i = 1;i<110;i++)
{
[imageArray addObject:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat: @"%i", i] ofType:@"png"]]];
}
[super viewWillAppear:animated];}
Просмотр загруженного кода:
- (void)viewDidLoad {
animation = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, 480, 320)];
animation.contentMode = UIViewContentModeCenter;
[self.view addSubview:animation];
animation.image = [imageArray objectAtIndex:40];
[super viewDidLoad];}
Обработчик касаний:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
// Enumerates through all touch objects
for (UITouch *touch in touches) {
CGPoint touch_point = [touch locationInView:self.view];
// calculate which frame to end on
int pos = ceil((touch_point.x/480) * 108);
[self redrawAnimation:pos];
}}
Перерисовка анимации:
- (void)redrawAnimation:(int)end_frame {
animation.image = [imageArray objectAtIndex:end_frame];
}
Приложение вылетает, когда вы несколько раз проводите пальцем по экрану.