我想在CALayer上拼贴CGImage,但它似乎只想拉伸它。
示例代码:
self.background = [UIImage imageNamed: @"Background.png"];
[documentDisplay.layer setContents: self.background.CGImage];
如果可以的话,我想避免继承。
答案 0 :(得分:13)
您可以使用图案图像创建颜色,并将其设置为图层的背景颜色。
要做到这一点,您需要将CGImage
包裹在CGPattern
中并从中CGColor
。{/ p>
// callback for CreateImagePattern.
static void drawPatternImage (void *info, CGContextRef ctx)
{
CGImageRef image = (CGImageRef) info;
CGContextDrawImage(ctx,
CGRectMake(0,0, CGImageGetWidth(image),CGImageGetHeight(image)),
image);
}
// callback for CreateImagePattern.
static void releasePatternImage( void *info )
{
CGImageRelease((CGImageRef)info);
}
//assume image is the CGImage you want to assign as the layer background
int width = CGImageGetWidth(image);
int height = CGImageGetHeight(image);
static const CGPatternCallbacks callbacks = {0, &drawPatternImage, &releasePatternImage};
CGPatternRef pattern = CGPatternCreate (image,
CGRectMake (0, 0, width, height),
CGAffineTransformMake (1, 0, 0, 1, 0, 0),
width,
height,
kCGPatternTilingConstantSpacing,
true,
&callbacks);
CGColorSpaceRef space = CGColorSpaceCreatePattern(NULL);
CGFloat components[1] = {1.0};
CGColorRef color = CGColorCreateWithPattern(space, pattern, components);
CGColorSpaceRelease(space);
CGPatternRelease(pattern);
yourLayer.backgroundColor = color; //set your layer's background to the image
CGColorRelease(color);
此代码是从GeekGameBoard示例代码修改的。
答案 1 :(得分:9)
实现此目的的最简单代码是:
CALayer *layer = [CALayer layer];
layer.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background_tile"]].CGColor;
答案 2 :(得分:2)
这相当简单。但要注意,这是一个私有API,使用风险自负。
设置如下
#import <QuartzCore/QuartzCore.h>
CA_EXTERN NSString * const kCAContentsScalingRepeat;
@interface CALayer (CALayerAdditions)
@property(copy) NSString *contentsScaling;
@end
然后就这样做
[myLayer setContentsScaling:kCAContentsScalingRepeat];
答案 3 :(得分:0)
您可以为此
使用CGContextDrawTiledImage方法