2011-04-09 30 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