我遵循this answer中列出的指示,以在Core Graphics中填充具有图案的图层。当图层是CALayer子类时,绘图工作正常。但是,当图层是CATiledLayer子类时,运行时会出现EXC_BAD_ACCESS
错误。如何在CATiledLayer中绘制平铺图案图像?
static void drawPatternImage (void *info, CGContextRef ctx)
{
CGImageRef image = (CGImageRef) info;
CGContextDrawImage(ctx,
CGRectMake(0,0, CGImageGetWidth(image),CGImageGetHeight(image)),
image); // EXC_BAD_ACCESS here :(
}
static void releasePatternImage(void *info)
{
CGImageRelease((CGImageRef)info);
}
// pattern creation
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);
theLayer.backgroundColor = color;
CGColorRelease(color);
我需要做什么才能在CATiledLayer子类中绘制图案图像?
嗨!感谢这个代码。它不会崩溃,图像被正确绘制,并且不是倒置的,但它似乎是从底部绘制的,因为当我调整窗口大小时,底部是固定的,而顶部正在移动。你知道我怎么能有相反的工作? – aneuryzm 2013-02-13 08:25:34