2010-12-29 15 views
0

Was ich mache, habe ich einen Code für den Kalender heruntergeladen jetzt möchte ich Bilder auf seinen Kacheln anzeigen (für Datum).Bild in einem CGContextRef anzeigen

Was ich versuche, zeigt im Code

- (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); 

}

In anderen Zustand i Bilder auf der Fliese zeigen wollen, so für das i Bildobjekte in der CGImageRef bin zu konvertieren.

Bitte helfen Sie mir.

Ich bin mir nicht sicher, ob dies auf die gleiche Weise oder auf andere Weise getan werden würde, bitte schlagen Sie Ihren Weg vor, dies zu tun.

Vielen Dank.

Antwort

0

Der Dateipfad des Bildes scheint problematisch zu sein. Sie können den richtigen Pfad mit den NSBundle -Methoden abrufen. Außerdem verlieren Sie viel Speicher, weil Sie Ihre Bilder und Datenanbieter nicht freigeben. Um eine lange Geschichte kurz zu machen, versuchen Sie dies:

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

oder noch einfacher:

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

Ok Danke, aber das auch nicht funktionieren drawInRect und drawAtPoint. – Ishu

+0

Und Bot Bild-und Datenanbieter sind Autorealease-Objekte. – Ishu

+0

Nein, sie sind nicht autoreleased. Lesen Sie die Dokumentation sorgfältiger. Übrigens, wenn du einen Kontext verwendest, der nicht der aktuelle Kontext ist, musst du ihn drücken und dann loslassen. –