跳至正文
首页 » 博客 » iOS – Async Drawing – Part 1

iOS – Async Drawing – Part 1

在应用程序开发的世界中,性能始终是一个问题。今天,我将向您展示如何轻松地为自定义绘图的应用程序添加性能。

如果你曾经使用过coregaphics API,那么你可能知道绘图工作主要是在CPU上完成的。因为,你的应用程序逻辑的其余部分也将依赖于CPU,你不希望你的UI代码被锁定。

在这三部分系列中,我将向您介绍设置此代码的代码。

第1部分: 绘制成图像

第2部分: 使用GCD

第三部分: 把它们放在一起

第一部分: 绘制成图像

通常,当你去绘制一些自定义UI时,你可能会绘制到UIView的CGContext中。虽然这是一个合法的方式来做到这一点,你有更少的控制,当你可以画。

相反,通过绘制图像,您可以完全控制,甚至可以控制所绘制内容的分辨率。

那么,绘制图像的代码是什么样子的。以及它令人惊讶的非常简单:

-(UIImage *)draw 🙁 CGSize)size
{
CGFloat screenScale = [UIScreen mainScreen].scale;
UIGraphicsBeginImageContextWithOptions(size, NO, screenScale);
CGContextRef ctx = UIGraphicsGetCurrentContext();

// Todo-绘图代码在这里
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

返回图像;
}

就是这样!很简单,对吧?

让我们通过代码片段,所以你知道发生了什么。

第一部分,抓住屏幕缩放,控制图像将被渲染的 “像素密度”。基本上,如果图像是视网膜或非视网膜。默认情况下,比例将为1,即非视网膜。所以,我们抓住设备的规模并使用它,这样无论我们使用什么设备,它看起来都很好。请注意,规模越高,性能应该越差。因此,如果您需要获得更好的性能,并且渲染质量不那么重要,您可以随时降低比例。

接下来的步骤,只是抓住我们要绘制的CGContext。

然后,您可以插入绘图代码。

最后,我们需要抓住我们想要创建的图像。

请继续关注本系列的第2部分,其中我将介绍异步代码。

史蒂芬·扎哈鲁克