2010-01-06 70 views
3

我有UIView子类 - 实际上是一块拼图 - 有2个不同的CGLayer在initWithFrame初始化。在绘制之前设置CGLayer的“不透明度”?

在我的drawRect必须共混这两层,和最上面的应具有可变阿尔法取决于游戏逻辑。

什么是最好的(最优化性能)的方式来做到这一点?有没有任何CGLayer或CGContext函数在绘制之前设置一些alpha?

回答

6

设置该层的-opacity。请记住,图层的-opaque设置必须为NO。默认值为NO,但由于性能原因,它通常设置为YES。

如果你已经做-drawInContext:,那么你就可以CGContextSetAlpha()实验。不过,通常情况下,您不会同时使用-drawRect:和图层。通常让视图或图层进行绘制。

+0

你的意思是我应该创建一个独立的例如。 - (void)renderView方法,并在那里实现图层? 然后[puzzlePiece setNeedDisplay]可以通过简单的[puzzlePiece的RenderView]取代的? – Geri 2010-01-06 23:15:08

+0

这听起来是正确的,如果你需要每次渲染视图的所有部分。否则,我只会在模型类(数据)更改时重新渲染所需的图层。没有理由重绘一个图层,因为其他图层需要重绘。 – 2010-01-07 00:24:26

+0

'课程。 拼图实际上被分配一个PuzzlePiece的/ addSubview-ED实例:UIView类,所以只有最近用户操纵的片得到重画信息(上述的RenderView“是指” renderPuzzleView)。 – Geri 2010-01-07 13:09:25