2011-04-09 64 views
3

我创建一个CALayer这样的:CALayer - backgroundColor翻转?

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

出于某种原因,该图案是颠倒绘制。我已经尝试设置geometryFlipped并应用子图层转换,但它不起作用。

回答

10

实际使用[backgroundLayer setTransform:CATransform3DMakeScale(1.0, -1.0, 1.0)];确实工作。

+0

但它也翻转了它的sublayers,我不想要 – 2017-04-06 11:39:58

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]; 

这将提供层内的图像内容,并自动适应,所以它做背景的伟大工程。林不知道为什么你的方法不工作,对此感到抱歉,但我认为这将是很好,为您提供这种方法。

+0

我使用背景颜色,因为我想平铺图像,而不是拉伸它。 – ryyst 2011-04-09 12:48:57

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