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

iOS – Async Drawing – Part 3

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

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

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

第一部分: 绘制成图像

第2部分: 使用GCD

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

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

好是这样,现在你可以渲染成一个图像,你知道如何创建异步代码。那么我们如何将两者结合在一起呢?

其实很简单。

我们将首先创建一个新的视图,但派生自UIImageView。

然后,我们要添加一个无效的方法与标志,说是否呈现异步。

基本上就是这样!

@ interface CustomView()
{
SingleDispatchQueue * _dispatcher;
}
@ end

@ implementation CustomView

-(void)invalidate 🙁 BOOL)async
{
CGSize size = self.bounds.size;
if(async)
{
if(_dispatcher = = nil)
_dispatcher = [[SingleDispatchQueue alloc]init];

__ 弱CustomView * weakSelf = self;
[_dispatcher addBlock:^()
{
UIImage * image = [weakSelf draw:size];
dispatch_sync(dispatch_get_main_queue(), ^()
{
weakSelf.image = image;
});

}];
}
else
{
self.image = [self draw:size];

}
}

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

// Todo-绘图代码在这里

UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

返回图像;
}

@ end

就是这样!

现在只需插入你的绘图代码,你就可以走了。

每当你调用无效,你可以画出你的观点。

享受!

史蒂芬·扎哈鲁克 (SteveZ)