Может кто-нибудь показать мне, как создать CGPattern, который я могу использовать для обводки пути с изображением? - PullRequest
3 голосов
/ 03 марта 2010

Я хочу обвести путь, используя имеющийся файл .png, но я просто не знаю, как создать CGPatternRef.

Ответы [ 2 ]

6 голосов
/ 28 апреля 2011

вот небольшой фрагмент

- (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);
}
4 голосов
/ 03 марта 2010

См. соответствующую главу Руководства по программированию Quartz 2D и справочную документацию для CGPattern .

Существенная деталь, которая скрыта в Руководстве по программированию на страницах и страницах «LOOK PRETTY PATTERNS», заключается в том, что вам нужно написать функцию обратного вызова, которая рисует один экземпляр шаблона, и передать указатель на этот обратный вызов на CGPatternCreate , Когда вы рисуете рисунок, Кварц перезвонит вам, а затем выложит все, что вы нарисовали.

...