Я хочу погладить путь с помощью .png, который у меня есть, но я просто не знаю, как сделать CGPatternRef.Может кто-нибудь, пожалуйста, покажите мне, как создать CGPattern, который я могу использовать, чтобы погладить путь с изображением?
3
A
ответ
4
См. the relevant chapter of the Quartz 2D Programming Guide и the reference documentation for CGPattern.
Важная деталь, которая похоронена в Руководстве по программированию под страницами и страницами «LOOK PRETTY PATTERNS», заключается в том, что вам нужно написать функцию обратного вызова, которая рисует один экземпляр шаблона и передает указатель на этот обратный вызов на CGPatternCreate
. Когда вы нарисуете шаблон, Quartz вызовет ваш обратный вызов, а затем выложите все, что вы нарисовали.
6
вот небольшой отрывок
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
[self patternMake2:rect context:context];
}
//-------------------------------------------------------------------
// patternMake2
//-------------------------------------------------------------------
void pattern2Callback (void *info, CGContextRef context) {
UIImage *image = [UIImage imageNamed:@"NavBarBg.png"];
CGImageRef imageRef = [image CGImage];
CGContextDrawImage(context, CGRectMake(0, 0, 320, 44), imageRef);
}
- (void)patternMake2:(CGRect)rect context:(CGContextRef)context
{
static const CGPatternCallbacks callbacks = { 0, &pattern2Callback, NULL };
//NSLog(@"rect: %f %f %f %f", rect.origin.x, rect.origin.x, rect.size.width, rect.size.height);
//CGContextSaveGState(context);
CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL);
CGContextSetFillColorSpace(context, patternSpace);
CGColorSpaceRelease(patternSpace);
CGSize patternSize = CGSizeMake(315, 44);
CGPatternRef pattern = CGPatternCreate(NULL, self.bounds, CGAffineTransformIdentity, patternSize.width, patternSize.height, kCGPatternTilingConstantSpacing, true, &callbacks);
CGFloat alpha = 1;
CGContextSetFillPattern(context, pattern, &alpha);
CGPatternRelease(pattern);
CGContextFillRect(context, rect);
//CGContextRestoreGState(context);
}
Если мы всегда передать NULL для информации? – kelin