CALayer - backgroundColor翻转?
问题描述:
我创建一个CALayer
这样的:CALayer - backgroundColor翻转?
UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"MyPattern.png"]];
backgroundLayer = [[CALayer alloc] init];
[backgroundLayer setBackgroundColor:[color CGColor]];
[[self layer] addSublayer:backgroundLayer];
出于某种原因,该图案是颠倒绘制。我已经尝试设置geometryFlipped
并应用子图层转换,但它不起作用。
答
实际使用[backgroundLayer setTransform:CATransform3DMakeScale(1.0, -1.0, 1.0)];
确实工作。
答
我宁愿用这个方法:
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
我使用背景颜色,因为我想平铺图像,而不是拉伸它。 – ryyst 2011-04-09 12:48:57
答
而不是使用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。
但它也翻转了它的sublayers,我不想要 – 2017-04-06 11:39:58