показать изображение в CGContextRef - PullRequest
0 голосов
/ 29 декабря 2010

Что я делаю, я загрузил код для календаря, теперь я хочу показать изображения на его плитках (для даты).

То, что я пытаюсь, показывает в коде

- (void)drawTextInContext:(CGContextRef)ctx
{
    CGContextSaveGState(ctx);
    CGFloat width = self.bounds.size.width;
    CGFloat height = self.bounds.size.height;

    CGFloat numberFontSize = floorf(0.3f * width);

CGContextSetFillColorWithColor(ctx, kDarkCharcoalColor);
CGContextSetTextDrawingMode(ctx, kCGTextClip);
for (NSInteger i = 0; i < [self.text length]; i++) {
    NSString *letter = [self.text substringWithRange:NSMakeRange(i, 1)];
    CGSize letterSize = [letter sizeWithFont:[UIFont boldSystemFontOfSize:numberFontSize]];

    CGContextSaveGState(ctx);  // I will need to undo this clip after the letter's gradient has been drawn
    [letter drawAtPoint:CGPointMake(4.0f+(letterSize.width*i), 0.0f) withFont:[UIFont boldSystemFontOfSize:numberFontSize]];

    if ([self.date isToday]) {
        CGContextSetFillColorWithColor(ctx, kWhiteColor);
        CGContextFillRect(ctx, self.bounds);  

    } else {
       // CGContextDrawLinearGradient(ctx, TextFillGradient, CGPointMake(0,0), CGPointMake(0, height/3), kCGGradientDrawsAfterEndLocation);
        CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename("left-arrow.png"); 
        CGImageRef image = CGImageCreateWithPNGDataProvider(dataProvider, NULL, NO, kCGRenderingIntentDefault);
        //UIImage* image = [UIImage imageNamed:@"left-arrow.png"];
        //CGImageRef imageRef = image.CGImage;

        CGContextDrawImage(ctx, CGRectMake(8.0f+(letterSize.width*i), 0.0f, 5, 5), image);
        //im.image=[UIImage imageNamed:@"left-arrow.png"];

    }

    CGContextRestoreGState(ctx);  // get rid of the clip for the current letter        
}

CGContextRestoreGState(ctx);

}

В другом состоянии я хочу показать изображения на плитке, поэтому для этого я конвертирую объекты изображений в CGImageRef.

Пожалуйста, помогите мне.

Я не уверенэто будет сделано таким же или иным способом, пожалуйста, предложите свой способ сделать это.

Большое спасибо.

1 Ответ

0 голосов
/ 30 декабря 2010

Путь к файлу изображения кажется проблематичным.Вы можете получить правильный путь с помощью NSBundle -методов.Также вы теряете много памяти, потому что вы не выпускаете свои изображения и поставщиков данных.Короче говоря, попробуйте это:

[[UIImage imageNamed:@"left-arrow.png"] drawInRect:...]

или даже проще:

[[UIImage imageNamed:@"left-arrow.png"] drawAtPoint:...]
...