核心图形绘制形状和文本混合

时间:2011-01-27 02:43:44

标签: iphone objective-c ios core-graphics

我正在使用UITableView和自定义UITableViewCell。最初,当我从nib文件加载单元格的视图时,这性能很差。

我找到了Twitter for iPhone的作者的博客文章,讨论了为单元格绘制我们自己的图形以提高性能。这听起来很容易,对吗?

所以,我开始这样做了:

- (void)drawRect:(CGRect)rect{
// Drawing code
#define LEFT_COLUMN_WIDTH 48

#define MIDDLE_COLUMN_OFFSET 52
#define MIDDLE_COLUMN_WIDTH 180

#define MAIN_FONT_SIZE 12
#define MIN_MAIN_FONT_SIZE 10
#define SECONDARY_FONT_SIZE 10
#define MIN_SECONDARY_FONT_SIZE 10

#define RIGHT_COLUMN_SIZE 70
#define PADDING 4

UIColor * secondaryTextColor = nil;
UIFont * secondaryFont = [UIFont systemFontOfSize:SECONDARY_FONT_SIZE];

//mainTextColor = [UIColor blackColor];
secondaryTextColor = [UIColor blackColor];
self.backgroundColor = [UIColor whiteColor];


CGPoint point;

CGSize size;

//[mainTextColor set];

NSString * textToDisplay = @"Test";

CGPoint rightColumnStart = CGPointMake(self.frame.size.width - PADDING - RIGHT_COLUMN_SIZE, 0);

point = CGPointMake(rightColumnStart.x + (RIGHT_COLUMN_SIZE/2 - size.width/2), 40);
[textToDisplay drawAtPoint:point forWidth:RIGHT_COLUMN_SIZE withFont:secondaryFont minFontSize:MIN_SECONDARY_FONT_SIZE actualFontSize:NULL lineBreakMode:UILineBreakModeTailTruncation baselineAdjustment:UIBaselineAdjustmentAlignBaselines];

    // background color
/*CGContextRef context = UIGraphicsGetCurrentContext();
CGContextBeginPath(context);
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
CGContextAddRect(context, CGRectMake(rightColumnStart.x, 0, RIGHT_COLUMN_SIZE, self.frame.size.height));
CGContextFillPath(context);
 */
}

正如你所看到的,有很多东西正在发生(以及相当数量的硬编码坐标,暂时忽略这些神奇的数字)。

因此,在代码块中,如果您查找注释“背景颜色”,可以看到我正在绘制一个彩色矩形。我也在同一个坐标空间内绘制文本“test”,我想在矩形顶部显示。

因此,如果我在没有启用“背景颜色”的情况下运行应用程序,则“测试”文本会显示没有问题。它是黑色,尺寸10,看起来很棒,定位正确等等。

当我绘制矩形时,“测试”文本不会显示。它很可能在彩色矩形后面渲染,或者没有正确设置混合。

如何避免此问题并将两者混合在一起,以便黑色文本显示在彩色矩形的顶部?我不确定我应该通过谷歌提出什么问题,所以如果这很简单,我会道歉。

感谢!!!!

2 个答案:

答案 0 :(得分:2)

首先绘制背景,然后绘制文本。

答案 1 :(得分:0)

在绘制文本后,您似乎正在绘制背景颜色。如果您希望文本显示在它前面,则必须在它之前绘制它。