Проблема производительности на IOS при перерисовке изображения с градиентной маской - PullRequest
0 голосов
/ 20 декабря 2011

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

Но перерисовка останавливает гироскоп.

Что я могу сделать для этой ситуации?

Редактировать код добавлен

- (UIImage *)reflectedImage:(UIImageView *)fromImage withHeight:(NSUInteger)height
{
CGImageRef gradientMaskImage = CreateGradientImage(1, height);

CGImageRef masked = CGImageCreateWithMask([fromImage.image CGImage], gradientMaskImage);
CGImageRelease(gradientMaskImage);

UIImage *theImage = [UIImage imageWithCGImage:masked];

return theImage;
}

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

1 Ответ

1 голос
/ 21 декабря 2011

Вы можете перерисовать изображение в фоновом потоке. Когда изображение будет готово, обновите пользовательский интерфейс в главном потоке.

static dispatch_queue_t background_queue;
- (void)updateImage {
  if (background_queue == nil){
        background_queue = dispatch_queue_create("com.myappname.myIdentifier", 0);
  }

  dispatch_async(background_queue, ^ {  // render the image in the background thread
     UIImage * theImage = [self reflectedImage:fromImage withHeight:height]; 
     dispatch_sync(dispatch_get_main_queue(), ^{
        imageView.image = theImage;    // Update the imageview in the main thread
     });
  });
}

Редактировать: исправление кода

...