2015-04-10 9 views
1

Я пытаюсь создать простой механизм рендеринга программного обеспечения. Поэтому я ищу наиболее эффективный способ рисовать пиксель UIView.Рисовать пиксель на пиксель в UIView

Это то, что я пробовал:

  • Рисование с помощью drawRect:
  • Создать CGContext используя CGBitmapContextCreate и привлечь к нему вручную

Оба этих дал мне жуткую частоту кадров, вокруг 15 кадров в секунду.

Кто-нибудь знает способ рисовать пиксель на пиксель более результативным способом?

ответ

2

Попробуйте добавить UIImageView, как подвид вашего зрения и установить свойство изображения его с выводимого изображения вне DrawRect:

- (void)renderImageInRect:(CGRect)rect { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     UIGraphicsBeginImageContext(rect); 
     //draw... 
     UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
     dispatch_async(dispatch_get_main_queue(), ^{ 
       self.imageView.image = image; 
     }); 
     UIGraphicsEndImageContext(); 
    } 
} 

Другим решением является использование OpenGL ES, как в GPUImage

Edit: Другое решение, основанное на CALayer без подзапроса UIImageView.

Просто изменение строки кода:

self.imageView.image = image; 

с:

self.layer.contents = (id) image.CGImage; 
+0

Это действительно улучшить мою скорость передачи кадров совсем немного (30 кадров в секунду), OpenGL напрямую, вероятно, единственное, что получит меня более высокая производительность. Спасибо за Ваш ответ. – NSAddict

Смежные вопросы