在UIView中绘制每像素的像素

时间:2015-04-10 16:49:29

标签: ios objective-c swift uiview

我正在尝试创建一个简单的软件渲染引擎。因此,我正在寻找以像素为单位绘制UIView像素的最佳方式。

这是我尝试过的:

  • 使用drawRect:
  • 绘制
  • 使用CGContext创建CGBitmapContextCreate并手动绘制

这两个都给了我可怕的帧速率,大约15 fps。

有没有人知道以更高效的方式绘制每像素像素的方法?

1 个答案:

答案 0 :(得分: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();
   }
}

另一种解决方案是在GPUImage

中使用OpenGL ES

修改 另一种基于CALayer的解决方案,没有UIImageView子视图。

只需更改代码行:

self.imageView.image = image;

with:

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