CALayer - backgroundColor翻了吗?

时间:2011-04-09 10:44:06

标签: iphone objective-c core-animation calayer

我正在创建这样的CALayer

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

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

3 个答案:

答案 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