Используйте пул для порождения изображений - PullRequest
0 голосов
/ 21 февраля 2012

Привет всем, вот мой код:

-(void) createNewImage {


[imageView setCenter:[self randomPointSquare]];
[[self view] addSubview:imageView];

[views addObject:imageView];
[imageView release];

ix=imageView.center.x;
iy=imageView.center.y;
[XArray addObject:[NSNumber numberWithFloat:(240 - ix)/diviseurVitesse]];
[YArray addObject:[NSNumber numberWithFloat:(160 - iy)/diviseurVitesse]];

}

-(void)moveTheImage{
    for (NSUInteger i = 0; i < [views count]; i++) {
    imageView = [views objectAtIndex:i];
    X = [[XArray objectAtIndex:i] floatValue];
    Y = [[YArray objectAtIndex:i] floatValue];
imageView.center=CGPointMake(imageView.center.x + X, imageView.center.y + Y);

} С помощью этого кода изображение создается и перемещается в центр экрана, но через несколько секундпроизводительность снижается и достигает 30 кадров в секунду.Я хотел бы сохранить fps на уровне 60, но я не знаю, как поступить. Некоторые люди говорят, что я могу использовать пул, но мне трудно его использовать, потому что я действительно не знаю, как его использовать: / извините за мойанглийский я французский: /

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

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

Итак, представьте, что у вас есть 3 вида.Представление 1 создается и появляется на краю экрана и перемещается к центру.Когда это на полпути к центру, вид 2 создается и появляется на краю экрана и начинает двигаться к центру.Когда вид 2 находится на полпути к центру, вид 1 находится в центре, а вид 3 создается и появляется на краю экрана.Теперь, когда вид 2 достигает центра, вид 1 сбрасывается на край экрана (он будет покрыт видом 2, поэтому он не будет замечен).Затем, когда вид 3 достигнет центра, он покроет вид 2, так что его можно сбросить до края экрана.

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

0 голосов
/ 21 февраля 2012

Ваша проблема, скорее всего, здесь - [views addObject:imageView];. Добавление объекта в постоянный набор данных, такой как NSMutableArray, сохраняет объект, поэтому потребление памяти фактически увеличивается. Попробуйте манипулировать изображениями в [self.view subviews], не сохраняя их в массиве.

РЕДАКТИРОВАТЬ: Ваш код должен выглядеть примерно так

- (void)createAndMove {

UIImageView *imageView = [UIImageView alloc] initWithImage:image];
[imageView setCenter:[self randomPointSquare]];
[self.view addSubview:imageView];

[UIView animateWithDuration:5 animations:^{
imageView.center = self.view.center;
}];

}

РЕДАКТИРОВАТЬ 2:

- (void)moveImages {
  for (UIImageView *img in [self.view subviews]) {
  [UIView animateWithDuration:5 animations:^{
    img.center = self.view.center;
  }];
  }
}
...