iPhone:石英优化绘图

时间:2009-11-20 16:21:59

标签: iphone iphone-sdk-3.0 quartz-graphics

我创建了一个宽800像素,高1200像素的CG上下文。我已经在这个已经转换(缩放,翻译和旋转)的上下文中创建了CGLayer。因此,在某些时候,由于CGLayer比上下文更大并且已被翻译,旋转等,因此并非CGLayer的所有部分都属于上下文。见下图:

layer and context

正如您在图片中看到的那样,图层的某些部分位于上下文区域之外。当我使用

渲染最终构图时
CGContextDrawLayerInRect(context, superRect, objectLayer);

它将呈现整个图层,包括上下文之外的那些不必要的部分。

我的问题是:如果我可以在上下文中绘制相关部分,我可以快速渲染并节省内存。

有没有办法做到这一点?

注意:LAYER包含透明度。

请不要提供不涉及CGLayers的解决方案。

提前感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用CGContextClip / -ToMask / -ToRect剪辑上下文。

但我认为将像素“转储”到上下文中实际上更便宜/更快,而不是必须计算剪裁边界和“减少”。

剩余绘图不会(通常)耗尽额外的内存。

答案 1 :(得分:0)

你能使用CATiledLayer吗?这应该在广场ala谷歌地图中延迟加载......

+(Class)layerClass
{
return [CATiledLayer class];
}


-(id)init {
   CATiledLayer *tiledLayer = (CATiledLayer *) self.layer;
   tiledLayer.tileSize = CGSize(x,x);
   tiledLayer.levelsOfDetail = y;
   tiledLayer.levelsOfDetailBias = z;
}