В моем приложении мне нужно было что-то вроде системы частиц, поэтому я сделал следующее:
Пока приложение инициализируется, я загружаю UIImage
laserImage = [UIImage imageNamed:@"laser.png"];
UIImage * laserImage объявляется в интерфейсе моего контроллера. Теперь каждый раз, когда мне нужна новая частица, этот код создает:
// add new Laserimage
UIImageView *newLaser = [[UIImageView alloc] initWithImage:laserImage];
[newLaser setTag:[model.lasers count]-9];
[newLaser setBounds:CGRectMake(0, 0, 17, 1)];
[newLaser setOpaque:YES];
[self.view addSubview:newLaser];
[newLaser release];
Обратите внимание, что изображения имеют размер только 17px * 1px, а model.lasers - это внутренний массив для выполнения всех расчетов, отделенных от графического вывода. Поэтому в моем основном цикле рисования я установил все позиции UIImageView в вычисленные позиции в моем массиве model.lasers:
for (int i = 0; i < [model.lasers count]; i++) {
[[self.view viewWithTag:i+10] setCenter:[[model.lasers objectAtIndex:i] pos]];
}
Я увеличил теги на 10, потому что по умолчанию это 0, и я не хочу перемещать все представления с тегом по умолчанию.
Таким образом, анимация выглядит хорошо с примерно 10 - 20 изображениями, но на самом деле становится медленной при работе с примерно 60 изображениями. Итак, мой вопрос: есть ли способ оптимизировать это без перезапуска в OpenGl ES?