2011-01-15 7 views
0

Ich habe eine Anwendung von Fliese Spiel für iPhone 3 entwickelt. In dem ich ein Bild von meiner Ressource und teilte es in die Anzahl der Fliesen mit CGImageCreateWithImageInRect (originalImage.CGImage, frame); Funktion.Retina Display von Bildern-iPhone 3 bis 4

Es funktioniert gut auf allen iPhones, aber jetzt will ich, dass es auch auf Retina Displays funktioniert.

Also per this link habe ich ein Bild mit seiner Größe verdoppelt die aktuelle Bildgröße und benenne es durch Hinzufügen von Suffix @ 2x. Aber das Problem ist, dass es nur die obere Hälfte des Retina-Anzeigebildes braucht. Ich denke, das liegt an dem Rahmen, den ich bei der Verwendung von CGImageCreateWithImageInRect eingestellt habe. Was soll getan werden, damit dies funktioniert?

Jede Art von Hilfe wird wirklich geschätzt.

Vielen Dank im Voraus ...

Antwort

1

Das Problem für bestimmten initializers von UIImage richtig konfiguriert nur, dass der @ 2x Abbildungsmaßstab automatisch wahrscheinlich ist ... Try loading your UIImages using code like this from Tasty Pixel. der Eintrag mit dem Link, um mehr über dieses Thema spricht.

Mit der UIImage+TPAdditions Kategorie aus dem Link, werden Sie es wie so implementieren (nach dafür sorgen, dass die Bilder und ihre @ 2x Kollegen in Ihrem Projekt sind):

NSString *baseImagePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
NSString *myImagePath = [baseImagePath stringByAppendingPathComponent:@"myImage.png"]; // note no need to add @2x.png here 
UIImage *myImage = [UIImage imageWithContentsOfResolutionIndependentFile:myImagePath]; 

Dann sollten Sie in der Lage zu verwenden CGImageCreateWithImageInRect(myImage.CGImage, frame);

+0

Ich habe das auch versucht, aber es ist nicht der Maßstab == 2.0. Ich habe es im Simulator versucht. –

+0

Auch ohne dies zu implementieren Es nahm mein Bild mit dem Namen als @ 2x als Suffix. Aber jetzt, da die obige Bedingung stimmt nicht überein, dass es nicht mein @ 2x Bild überhaupt nimmt –

+0

Ich bearbeitete meine Antwort - poste etwas von deinem Code, wenn es nicht funktioniert, und ich werde versuchen zu helfen. –

0

Hier ist, wie ich es bekam in einer App arbeiten ich tat:

//this is a method that takes a UIImage and slices it into 16 tiles (GridSize * GridSize) 
#define GridSize 4 
- (void) sliceImage:(UIImage *)image { 
    CGSize imageSize = [image size]; 
    CGSize square = CGSizeMake(imageSize.width/GridSize, imageSize.height/GridSize); 

    CGFloat scaleMultiplier = [image scale]; 

    square.width *= scaleMultiplier; 
    square.height *= scaleMultiplier; 

    CGFloat scale = ([self frame].size.width/GridSize)/square.width; 

    CGImageRef source = [image CGImage]; 
    if (source != NULL) { 
     for (int r = 0; r < GridSize; ++r) { 
      for (int c = 0; c < GridSize; ++c) { 
       CGRect slice = CGRectMake(c*square.width, r*square.height, square.width, square.height); 
       CGImageRef sliceImage = CGImageCreateWithImageInRect(source, slice); 
       if (sliceImage) { 
        //we have a tile (as a CGImageRef) from the source image 
        //do something with it 
        CFRelease(sliceImage); 
       } 
      } 
     } 
    } 
} 

Der Trick mit dem -[UIImage scale] Eigenschaft, um herauszufinden, wie groß von einem Rect sollten Sie schneiden.

+0

so wollen Sie sagen, dass, wenn ich die Scheibe von 100x100 in iPhone 3 die für Retin-Display nahm ich muss die Scheibe von 200x200 nehmen? Ist es so? –

+0

Versuchte Ur-Code, aber es macht die Kachel größer daher führt zu Kacheln aus dem Bildschirm gehen :( –

+0

@hAPPY iCODER - oh, nein. Dies ist für das Schneiden eines UIImage, ob es myImage.png oder [email protected] ist. –