CALayer - backgroundColor переворачивается? - PullRequest
3 голосов
/ 09 апреля 2011

Я создаю CALayer, как это:

UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"MyPattern.png"]];
backgroundLayer = [[CALayer alloc] init];
[backgroundLayer setBackgroundColor:[color CGColor]];
[[self layer] addSublayer:backgroundLayer];

По какой-то причине рисунок рисуется вверх ногами. Я уже пытался установить geometryFlipped и применить преобразования подслоя, но это не работает.

Ответы [ 3 ]

10 голосов
/ 09 апреля 2011

Использование [backgroundLayer setTransform:CATransform3DMakeScale(1.0, -1.0, 1.0)]; на самом деле работает .

1 голос
/ 09 апреля 2011

Я бы предпочел использовать этот метод:

CALayer *backgroundLayer = [CALayer layer];

backgroundLayer.frame = CGRectMake(50, 50, 200, 200);

UIImage *img = [UIImage imageNamed:@"MyPattern.png"];

CGImageRef imgRef = CGImageRetain(img.CGImage);


backgroundLayer.contents = (id) imgRef;


[self.layer addSublayer:backgroundLayer];

Это обеспечит содержимое изображения внутри слоя, и оно будет соответствовать автоматически, поэтому отлично работает для фона.Я не уверен, почему ваш метод не работает, извините, но я подумал, что было бы неплохо предоставить вам этот метод.

0 голосов
/ 29 февраля 2016

Вместо использования CATransform3DMakeScale вы можете перевернуть изображение самостоятельно:

UIImage* img = [UIImage imageNamed:@"MyPattern.png"];
img = [UIImage imageWithCGImage:img.CGImage
                          scale:img.scale 
                    orientation:UIImageOrientationDownMirrored];
UIColor* color = [UIColor colorWithPatternImage:img];
…

Это прекрасно работает для меня.

Или вы можете пойти дальше и перерисовать изображение.

- (UIImage*)flipImage:(UIImage*)image {
    UIGraphicsBeginImageContext(image.size);
    CGContextDrawImage(UIGraphicsGetCurrentContext(),CGRectMake(0.,0., image.size.width, image.size.height),image.CGImage);
    UIImage* img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}

Подробности, почему это может быть полезно, содержатся в этом ответе .

...