添加文字的CALayer:drawInRect不工作
我做了以下内容:添加文字的CALayer:drawInRect不工作
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
UIGraphicsPushContext (ctx);
CGRect r = CGRectMake(500, 300, 200, 100);
NSString *text = [[NSString alloc] initWithString:@"raaaaaaaa!"];
UIColor *color = [ UIColor colorWithRed: (200.0f) green: (100.0) blue:(200.0f) alpha: 1.0f ];
[color set];
[ text drawInRect: r withFont:[UIFont systemFontOfSize:50] lineBreakMode: UILineBreakModeWordWrap alignment: UITextAlignmentLeft ];
[text release];
UIGraphicsPopContext();
}
}
}
上面的代码无法正常工作。为什么?
,如果我做的不是跟随,是工作:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
UIGraphicsPushContext (ctx);
CATextLayer *label = [[CATextLayer alloc] init];
[label setFont:@"Didot"];
[label setFontSize:50];
[label setFrame:CGRectMake(400, 300, 400, 100)];
[label setString:@"Helloooooooooooooooooo"];
[label setAlignmentMode:kCAAlignmentCenter];
[label setForegroundColor:[[UIColor blueColor] CGColor]];
[layer addSublayer:label];
[label release];
UIGraphicsPopContext();
}
}
的区别是什么,为什么drawInRect什么都不做?
谢谢
编辑 所以,我没有使用正确的UIColor,所以我改变
UIColor *color = [ UIColor colorWithRed: (200.0f) green: (100.0) blue:(200.0f) alpha: 1.0f ];
此
UIColor *color = [UIColor colorWithRed:200/255.0 green:100/255.0 blue: 200/255.0 alpha: 1.0];
仍然没有运气,我不能使用drawInRect时看到任何文字
有你两个问题问:
上面的代码无法正常工作。为什么?
起初我以为文字没有出现,因为它是用白色的白色绘制的。虽然它可能仍然如此,但这不是唯一的问题。
您正在将文本绘制到(r)中的矩形与您正在绘制的图层的边界相关。如果要绘制图层的左上角,则矩形的原点应该是(0,0)。上面的代码是仍然不工作。
如果您检查CGSize drawInRect:withFont:... returns(渲染文本的大小),您可以看到渲染文本的大小为0宽。这表示矩形绘制的高度为100是不够的。增加矩形的高度解决了这个问题,现在文本是可见的。如果您在图层中绘制某些文本,可能要绘制的最明智的矩形是图层的边界(CGRect r = [layer bounds];
)。
我做了什么,使其工作:
- 更改文本颜色
- 改变
r
原点(0,0) - 的
r
增加高度是什么是不同的[...]?
在第一个您绘制文本层的图形上下文(什么drawLayer:inContext的:是应该做的),但在秒例如要添加另一层层的层次结构,而不是绘图在里面。每当您的图层重新绘制时,都会添加一个新的文本图层。所以实际上没有任何东西被绘制到图层上下文中。
接下来发生的事情是,在图层自己绘制之后(空),图层的子图层将自己绘制并将其内容组合在图层上。这就是为什么你会看到文字图层的文字。
如果您添加这样的文本图层,您可以通过不必进行任何手动绘图来提高代码效率。这就要求文本图层在某个早期点(只有一次)被添加到图层中,并且您不需要执行任何自定义绘图(它通常很慢)。
谢谢你的伟大答案和耐心! – peterphonic 2012-08-02 13:11:16
只有当你读过的UIColor的类参考...
UIColor *color = [UIColor colorWithRed:200/255.0 green:100/255.0 blue: 200/255.0 alpha: 1.0];
将解决你的问题。
我以为是它,但没有运气。使用drawIinRect时仍然没有文字:( – peterphonic 2012-08-01 20:38:51
我也许你的框架的坐标是错误的。
CGRect r = CGRectMake(500, 300, 200, 100);
[label setFrame:CGRectMake(400, 300, 400, 100)];
注iPhone屏幕尺寸是320×460或3 20 * 568(iPhone5的)。在你的代码中,你设置了超出屏幕的x坐标400和500。
注意你的协调应遵循X < = 320,或者你不能看到它在屏幕上,除非你在一个滚动视图
你与白色的白色层上绘制...(1添加此例)。 rgba值从0.0到1.0(不是255) – 2012-08-01 20:00:49
@DavidRönnqvist我以为是的,但没有运气。使用drawIinRect时仍然没有文字:( – peterphonic 2012-08-01 20:38:08