我遵循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