如何在使用[UIColor colorWithPatternImage:]时更改图案相位?

3
我正在使用[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];
}

但这对模式阶段没有任何影响。有人能告诉我应该如何使用它吗?

非常感谢,

Joseph

1个回答

2

核心图形调用通常作为特定绘图过程的一部分使用;设置backgroundColor属性实际上并不会绘制任何内容,它只是默认情况下设置视图如何绘制自己。Quartz 2D编程指南有一个解释如何使用图案图像进行绘制的说明;您可能可以通过这种方式快捷地完成。

CGColorRef color = [UIColor colorWithPatternImage:image].CGColor;
CGContextSetFillColorWithColor(context, color);
CGContextFillRect(context, self.bounds);

我不确定,因为UIColor的图案可能无法与Core Graphics很好地配合使用。你可能需要采用上述链接中描述的更复杂的方法。


1
谢谢Noah,这确实改变了图案的相位。不幸的是,它并不适用于我的情况,因为drawRect:在单元格的最后一层上绘制,我失去了圆角和其他东西。但我想我应该为此开一个新问题。 - Joseph Lin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接