作者leondemon (狗狗)
看板MacDev
标题[问题] Draw a string in a specific CALayer
时间Tue Apr 5 16:43:59 2011
想请教一个问题
我有一个UIView的subclass 打算将其(CALayer*)layer内多叠几层其他的CALayer
其中一个sublayer是专门要画text用的
因为CATextLayer的string似乎是没有anti-aliasing
而用NSString的NSString UIKit Additions Category的drawInRect:WithFont:
似乎不是画在指定的Layer上?
而用CALayer的delegate method =>drawLayer:inContext: 似乎可以达到目的
但是我将该CALayer(画text的)的delegate与最上层layer的delegate同一个时(UIView)
却发生run-time时整个跳出,UIView在initialization时的code如下:
self.contextLayer = [CALayer layer]; // contexstLayer为CALayer
self.contextLayer.delegate = self; //将该layer的delegate设为UIView本身
[self.layer addSublayer:self.contextLayer]; //将该layer加到本身layer下
而我测试UIView底下的drawLayer:inContext:在还没被invoked 就先跳出整个App
请问有什麽方法可以解决这个问题呢?
因为我需要该CALayer是因为不同的subclass可以去实作该layer要怎麽画
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.126.38.191
※ 编辑: leondemon 来自: 120.126.38.191 (04/05 16:44)
1F:推 aecho:你是为了加快绘图的速度才这麽做的吗? 04/05 18:33
4F:→ aecho:目前查到的文章,不倾向覆写drawLayer:inContext: 04/05 18:49
谢谢!
因为我一个UIView其实内部含有不同的component
每次要display时 不是每个component都需要被redraw...
因此在设计上 我将不同的componenet以不同的CALayer加入原本最底层的layer
然後在drawRect的时候,只将某CALayer进行重画
但是我不知道要如何-drawRect内部 去针对某个CALayer进行redraw....
目前如果我直接在-drawRect内进行一些drawing code的话 都会被我其他的sublayer挡住
所以希望能将图层的概念套在UIView的内部 只针对某层进行改变...
我看我再试试看 新弄一个NSObject当做delegate好了(不过记忆体管理就变得有点麻烦)
※ 编辑: leondemon 来自: 120.126.38.191 (04/05 18:58)
5F:→ ttflee:CAxxx求快,CGxxx的求质量,需要高品质的绘图还需CG系的。 04/06 08:30