Как разместить содержание рядом CALayer?

Я хотел бы разместить CGImage рядом через CALayer, но это, кажется, только хочет расширить его.

Пример кода:

 self.background = [UIImage imageNamed: @"Background.png"];
 [documentDisplay.layer setContents: self.background.CGImage];

Я хотел бы постараться не разделять на подклассы, если я мог.

10
задан Jeffrey Drake 26 March 2010 в 03:23
поделиться

1 ответ

Вы можете создать цвет с изображением узора и установить его в качестве цвета фона слоя.

Для этого вам нужно обернуть CGImage в CGPattern и сделать из него CGColor .

// 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.

13
ответ дан 3 December 2019 в 16:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: