我做了以下事情:
- (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时看不到任何文字
答案 0 :(得分:7)
您有两个问题:
以上代码无效。为什么呢?
起初我认为文字没有显示,因为它是用白色绘制的。虽然它可能仍然如此,但这不是唯一的问题。
将文本绘制到(r)中的矩形相对于要绘制的图层的边界。如果要在图层的左上角绘图,则rect的原点应为(0,0)。上面的代码仍然无法正常工作。
如果你检查了drawInRect的CGSize:withFont:...返回(渲染文本的大小),你可以看到渲染文本的大小是0宽。这表示要绘制的矩形的高度为100是不够的。增加矩形的高度可以解决这个问题,现在文本可见。如果要在图层中绘制一些文本,可能要绘制的最合理的矩形是图层的边界(CGRect r = [layer bounds];
)。
我做了什么让它发挥作用:
r
的来源更改为(0,0)r
有什么区别[?]?
首先,您将文本绘制到图层的图形上下文中(drawLayer:inContext:应该做什么),但在秒示例中,您要将另一个图层添加到图层的层次结构中,而不是在图层内部绘制。每次重绘图层时,都会添加一个新的文本图层。因此,实际上没有任何内容被绘制到图层图形上下文中。
接下来,在您的图层绘制自己(空)之后,您的图层的子图层会自行绘制,其内容将在图层顶部组成。这就是你看到文本图层文本的原因。
如果您添加这样的文本图层,则无需进行任何手动绘图即可提高代码效率。这要求文本图层在某个早期点(仅一次)添加到您的图层,并且您不进行任何自定义绘图(通常很慢)。
答案 1 :(得分:1)
只有你读过UIColor的类引用...
UIColor *color = [UIColor colorWithRed:200 / 255.0 green:100 / 255.0 blue: 200 / 255.0 alpha: 1.0];
将解决您的问题。
答案 2 :(得分:0)
我或许你的框架的坐标错了。
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,否则您无法在屏幕上看到它,除非您在滚动视图中添加