2009-10-26 13 views
7

Tengo un UIImage que contiene una imagen con un montón de imágenes más pequeñas en la imagen (esencialmente una tira de imagen que contiene sprites). Me gustaría dibujar un solo sprite en un área de mi UIView.Dibujar áreas seleccionadas de un UIImage

Parece que no puedo encontrar una manera de dibujar solo parte del UIImage en la vista. ¿Hay algún método que haga esto?

Respuesta

8

Creo que puede estar buscando CGImageCreateWithImageInRect(). Puede obtener un CGImage de UIImage con el property of the same name.

EDITAR: otra opción que existe en 2014, que no fue en 2009, es SpriteKit. Dependiendo de lo que esté haciendo, necesita una hoja de sprites, que podría ser útil.

+0

Gracias, intentando esto ahora. – rein

+0

Bueno, @Sixten, creo que esto suena más como lo que él quería +1 –

+0

Funciona perfectamente (sin algunos dolores de cabeza cuando se voltea CGImages al dibujar). Gracias. – rein

2

Sí, puede hacerlo con Quartz.

Aquí hay un tutorial que le muestra cómo tomar un UIImage y enmascarar una parte de él.

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

Aquí está el código de esa página (en caso que se va hacia abajo por alguna razón)

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

Esto es genial y definitivamente lo marcaré pero no quiero crear una máscara para esto. Simplemente quiero hacer algo como: [[UIImage imageNamed: @ "myimage"] drawInRect: CGMakeRect (10,10,50,50) fromRect: CGMakeRect (60,60,50,50)]; – rein

3

Escribí una categoría UIImage para manejar hojas de sprites. Mira esto, puede ser útil http://reecon.wordpress.com/2011/11/19/uiimage-sprite-additions-objective-c/

Como se señaló anteriormente, en esta categoría bases CGImageCreateWithImageInRect() pero hace que el proceso de extracción de los sprites de una sola hoja de sprites muy más conveniente y más rápido.

Enlace a la página central git: https://github.com/r3econ/UIImage-Sprite-Additions

También puede instalar utilizando vainas de cacao.