Как изменить фазу рисунка при использовании [UIColor colorWithPatternImage:]? - PullRequest
3 голосов
/ 07 июля 2011

Я использую [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 Ответ

2 голосов
/ 07 июля 2011

Основные графические вызовы обычно используются как часть определенного процесса рисования;установка свойства backgroundColor на самом деле ничего не рисует, она просто устанавливает, как представление рисует себя по умолчанию.Руководство по программированию в Quartz 2D содержит объяснение того, как рисовать, используя изображения рисунков ;Вы можете использовать ярлык с помощью

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

… но я не гарантирую этого, потому что шаблоны UIColor могут плохо работать с Core Graphics.Возможно, вам придется выбрать более сложный маршрут, описанный в ссылке выше.

...