2011-04-09 12 views
3

나는이 같은 CALayer을 만드는거야 :CALayer - 배경색이 뒤집 혔습니까?

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)];을 사용하면 실제로 입니다. 대신 이미지를 직접 전환 할 수 CATransform3DMakeScale를 사용

+0

하지만 서브 레이어를 뒤집어 놓았습니다. –

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

0

:

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입니다.