UIImage, созданный в coregraphics, не повторяется - PullRequest
0 голосов
/ 20 марта 2012

У меня есть этот код, который должен повторять тот же UIImage:

UIView *paperMiddle = [[UIView alloc] initWithFrame:CGRectMake(0, 34, 320, rect.size.height - 34)];
UIImage *paperPattern = paperBackgroundPattern(context);
paperMiddle.backgroundColor = [UIColor colorWithPatternImage:paperPattern];
[self addSubview:paperMiddle];

И это метод paperBackgroundPattern:

UIImage *paperBackgroundPattern(CGContextRef context) {
    CGRect paper3 = CGRectMake(10, -15, 300, 16);
    CGRect paper2 = CGRectMake(13, -15, 294, 16);
    CGRect paper1 = CGRectMake(16, -15, 288, 16);

    //Shadow
    CGContextSetShadowWithColor(context, CGSizeMake(0,0), 10, [[UIColor colorWithWhite:0 alpha:0.5]CGColor]);
    CGPathRef path = createRoundedRectForRect(paper3, 0);
    CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]);
    CGContextAddPath(context, path);
    CGContextFillPath(context);

    //Layers of paper
    CGContextSaveGState(context);
    drawPaper(context, paper3);
    drawPaper(context, paper2);
    drawPaper(context, paper1);

    CGContextRestoreGState(context);
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(320, 1), NO, 0);
    UIImage *paperImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return paperImage;
}

Это не повторяет изображение. Результатом наличия изображения является то, что оно отображается как верхний пиксель экрана (это не тот кадр, который я ему дал).

Есть идеи, почему?

1 Ответ

2 голосов
/ 20 марта 2012

Я не знаю, что такое context, что вы проходите, но что бы это ни было, вы не должны втягиваться в это.И вы ничего не рисуете в контекст, который вы создали с помощью UIGraphicsBeginImageContextWithOptions.

. Если вы хотите сгенерировать изображение, вам не нужно передавать его в контекст, просто используйте тот, который UIGraphicsBeginImageContextWithOptions делает для вас.

UIImage *paperBackgroundPattern() {
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(320, 1), NO, 0);
    CGContextRef context = UIGraphicsGetCurrentContext();

    // draw into context, then...

    UIImage *paperImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return paperImage;
}

Кроме того - вы действительно пытаетесь сделать изображение шириной 320 пт и высотой 1?Кажется странным, что вы рисуете такие сложные вещи в таком крошечном изображении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...