我正在创建这样的CALayer
:
UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"MyPattern.png"]];
backgroundLayer = [[CALayer alloc] init];
[backgroundLayer setBackgroundColor:[color CGColor]];
[[self layer] addSublayer:backgroundLayer];
出于某种原因,图案被颠倒了。我已经尝试过设置geometryFlipped
并应用子图层转换,但它不起作用。
答案 0 :(得分:10)
使用[backgroundLayer setTransform:CATransform3DMakeScale(1.0, -1.0, 1.0)];
实际 工作。
答案 1 :(得分:1)
我宁愿使用这种方法:
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];
这将在图层内部提供图像内容并自动适合,因此适用于背景。我不知道为什么你的方法不起作用,抱歉,但我认为为你提供这种方法会很好。
答案 2 :(得分:0)
您可以自己翻转图像,而不是使用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;
}
详细说明其有用的原因在this answer。