我试图将两个图像组合成一个图像。不幸的是,为了响应用户滑动UISlider,必须非常快速地完成这项工作。我可以将两个图像组合成单个图像没问题。但我这样做的方式非常慢。滑块棒和跳跃相当令人沮丧。我不认为我可以将代码抛入后台线程,因为我会快速耗尽线程。我还没有真正累。下面是我的代码。关于如何加快速度的任何想法都会有所帮助。
UIGraphicsBeginImageContext(CGSizeMake(bodyImage.theImage.image.size.width * 1.2, bodyImage.theImage.image.size.height * 1.2));
[bodyImage.theImage.image drawInRect:
CGRectMake(-2 + ((bodyImage.theImage.image.size.width * 1.2) - bodyImage.theImage.image.size.width)/2,
kHeadAdjust,
bodyImage.theImage.image.size.width * bodyImage.currentScale,
bodyImage.theImage.image.size.height * bodyImage.currentScale)];
if(isCustHead)
{
[Head.theImage.image drawInRect: CGRectMake((bodyImage.theImage.image.size.width * 1.2 - headWidth)/2 - 11,
0,
headWidth * 0.92,
headWidth * (Head.theImage.image.size.height/Head.theImage.image.size.width) * 0.92)];
}
else
{
[Head.theImage.image drawInRect: CGRectMake((bodyImage.theImage.image.size.width * 1.2 - (headWidth * defaultHeadAdjust))/2 - 10,
0,
(headWidth * defaultHeadAdjust * 0.92),
(headWidth * defaultHeadAdjust) * (Head.theImage.image.size.height/Head.theImage.image.size.width) * 0.92)];
}
drawSurface.theImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
答案 0 :(得分:2)
我没有太多时间回答,但您要做的一件事就是将您的绘图移到NSOperation并使用performOnMainThread:完成后通知。
每次滑块移动时,告诉NSOperationQueue取消它的操作。这样一来,如果用户滑动的速度非常快,那么你不会只是立刻把它扔掉。
执行完成后,将图像存储在您制作的NSOperation子类中,并将其传递给主线程,您可以将图像应用于图层内容。
无论您的代码有多快,这都将有助于您的表现,尤其是对于spazztic用户。
对于图像渲染,您可能需要考虑制作自定义的屏幕外位图并将其渲染到其中。另外,尝试缓存大量数学,特别是如果它没有太大变化。
你做的越少,它就越快。
同时删除你可能拥有的任何NSLog,那些非常慢的东西。只有在配置中设置了一个标志时才使用宏来NSLog(所以我有一个调试+日志配置)
答案 1 :(得分:2)
但实际上,在一般情况下,没有必要自己绘制这些图纸。为这两个图像创建单独的CALayers,将它们添加到视图中,让CoreGraphics处理绘图。
答案 2 :(得分:0)
不是特定于iPhone。只是一个想法:
如何 ALPHA-blend 2 图像??
OR
在屏幕顶部显示2张图像 其他(上限为50%) 透明的)。