使用[UIColor colorWithPatternImage:]时如何更改模式阶段?

时间:2011-07-06 23:03:13

标签: iphone objective-c uitableview core-graphics uicolor

我正在使用[UIColor colorWithPatternImage:]为我的分组UITableViewCell设置背景图片。我为自己的细胞获得了自由的圆角,一切看起来都很棒,直到我尝试给细胞不同的高度。

理想情况下,我希望背景图像垂直居中,但colorWithPatternImage:方法从左下角开始图像模式,这使我的单元格看起来很糟糕。

它在文档中说

“默认情况下,返回颜色的相位为0,这会导致图像的左上角与绘图原点对齐。要更改相位,请将颜色设置为当前颜色,然后使用CGContextSetPatternPhase函数来改变阶段。“

但我不知道如何将CGContextSetPatternPhase用于我当前的实现。

我试过

- (void)drawRect:(CGRect)rect 
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);

    CGSize phase = CGSizeMake(50, 50);
    CGContextSetPatternPhase(context, phase);

    UIImage* image = [UIImage imageNamed:@"cell_background"];

    UIColor* color = [UIColor colorWithPatternImage:image];

    self.backgroundColor = color;

    CGContextRestoreGState(context);

    [super drawRect:rect];
}

但这对模式阶段没有任何影响。谁能告诉我我怎么用它?

非常感谢,

约瑟夫

1 个答案:

答案 0 :(得分:2)

核心图形调用通常用作特定绘图过程的一部分;设置backgroundColor属性实际上并不绘制任何内容,它只是设置默认情况下视图的绘制方式。 Quartz 2D Programming Guide有一个explanation of how to draw using pattern images;您可以通过

获取快捷方式
CGColorRef color = [UIColor colorWithPatternImage:image].CGColor;
CGContextSetFillColorWithColor(context, color);
CGContextFillRect(context, self.bounds);

...但我不保证,因为UIColor模式可能无法与Core Graphics一起使用。您可能必须采取上面链接中描述的更精细的路线。