2009-10-26 8 views
7

Ich habe ein UIImage enthält ein Bild mit einer ganzen Reihe von kleineren Bildern auf dem Bild (im Wesentlichen ein Bildstreifen mit Sprites). Ich möchte ein einzelnes Sprite auf einen Bereich meiner UIView zeichnen.Zeichnen Sie ausgewählte Bereiche eines UIImage

Ich kann nicht scheinen, einen Weg zu finden, nur einen Teil des UIImage auf die Ansicht zu zeichnen. Gibt es eine Methode, die das tut?

Antwort

8

Ich glaube, Sie für CGImageCreateWithImageInRect() suchen werden. Sie können einen CGImage von einem UIImage mit dem property of the same name erhalten.

EDIT: eine andere Option, die in 2014 existiert, die nicht im Jahr 2009, ist SpriteKit. Abhängig davon, was Sie tun können, benötigen Sie ein Sprite-Blatt, das nützlich sein könnte.

+0

Danke, versuche das jetzt. – rein

+0

Gut ein @Sixten, ich denke, das klingt mehr wie er wollte +1 –

+0

Funktioniert perfekt (minus ein paar Kopfschmerzen mit CGImages wird während des Zeichnens gekippt). Vielen Dank. – rein

2

Ja, Sie können sicher mit Quarz.

Es gibt ein Tutorial hier, das Ihnen zeigt, wie Sie ein UIImage nehmen und einen Teil davon maskieren.

http://iosdevelopertips.com/cocoa/how-to-mask-an-image.html

Hier ist der Code von dieser Seite (einhüllen es aus irgendeinem Grund untergeht)

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { 

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
     CGImageGetHeight(maskRef), 
     CGImageGetBitsPerComponent(maskRef), 
     CGImageGetBitsPerPixel(maskRef), 
     CGImageGetBytesPerRow(maskRef), 
     CGImageGetDataProvider(maskRef), NULL, false); 

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); 
    return [UIImage imageWithCGImage:masked]; 

} 
+0

Das sind großartige Sachen und ich werde definitiv Lesezeichen setzen, aber ich möchte keine Maske dafür erstellen. Ich möchte einfach etwas tun wie: [[UIImage imageNamed: @ "myimage"] drawInRect: CGMakeRect (10,10,50,50) fromRect: CGMakeRect (60,60,50,50)]; – rein

3

Ich schrieb eine UIImage Kategorie für die Handhabung von Sprite Sheets. Check this out, kann es hilfreich sein http://reecon.wordpress.com/2011/11/19/uiimage-sprite-additions-objective-c/

Wie bereits erwähnt, ist diese Kategorie basiert auf CGImageCreateWithImageInRect() aber macht den Prozess der Sprites aus einem einzigen Blatt Sprite weit bequemer und schneller extrahieren.

Link zu git Hub-Seite: https://github.com/r3econ/UIImage-Sprite-Additions

Sie können auch installieren Kakaoschoten verwenden.