将我的iPad(mini)更新到iOS7之后,我经历过我的绘图应用程序滞后并在几次击打后崩溃.
现在,当我使用xcode 5中的Instruments /内存分配工具运行应用程序时,我看到在屏幕上绘图时VM:CG栅格数据类别正在迅速填满.似乎有大量的CGDataProviderCreateWithCopyOfData调用,每个调用大小为3.00Mb.在连续绘制后,应用程序会收到内存警告,并且通常会终止.
代码基本上将路径转换为imagecontext,或多或少像这样:
UIGraphicsBeginImageContext(self.view.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)
在iOS7/iPad上,这是非常滞后的并且存在内存问题,而在iOS6上,这是相当快速的并且没有负面的内存占用.
当我在非视网膜iPhone版本中运行此代码时,CGDataProviderCreateWithCopyOfData调用的大小为604Kb,并且只有一个或两个同时处于"活动"状态.绘图流畅,快速,没有内存警告,也没有减速.
关于CoreGraphics和imagecontexts,从iOS6到iOS7发生了什么?
对于任何语言错误或其他可能的愚蠢错误,我们深表歉意.还是一个菜鸟,在我的业余时间做iOS开发.
我刚买了新的iPad(3),目前正在测试使用CoreGraphics的高分辨率版本的绘图应用程序.
在普通的1024x768模式下,iPad在性能上或多或少相似 - 在快速绘制时只有轻微的延迟.
但是,当我尝试在高分辨率画布(2048x1536)上绘画时,该应用程序变得非常缓慢且滞后.这是因为CoreGraphics主要是由CPU计算的(我认为它不比iPad2快得多)并且还需要多做4倍的工作?
我基本上改变了我的绘图程序
UIGraphicsBeginImageContext(CGSizeMake(1024, 768));
Run Code Online (Sandbox Code Playgroud)
至
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1024, 768), NO, 0.0);
Run Code Online (Sandbox Code Playgroud)
为了实现视网膜绘图,线条非常漂亮和清晰,图像在2048x1536中保存.但如上所述,延迟和滞后使其无法用作绘图工具.
除了在openGL中重写我的应用程序(由于时间限制和早期在关键混合模式下尝试不成功而不是一个选项),我可以做些什么来优化在新iPad上以视网膜模式运行的CoreGraphics应用程序?
我注意到使用此代码保存时,我正在制作的绘图应用程序中的线条图质量非常低:
UIImage *imageToSave = drawImage.image;
UIImageWriteToSavedPhotosAlbum(imageToSave, nil, nil, nil);
Run Code Online (Sandbox Code Playgroud)
据我所知,使用UIImageWriteToSavedPhotosAlbum时无法设置JPG质量.
有没有办法直接将UIImage作为PNG保存到照片库,或者某种方式来提高JPG质量?在进行屏幕截图(按下iPad上的开/关+主页)时,抓取图片的质量是完美的,但我不能指望人们以这种方式保存图像.
任何帮助非常感谢!