2011-08-15 9 views
11

Estoy tratando de enmascarar una imagen para poder darle solo dos esquinas redondeadas. Con el código que tengo, simplemente agrega la máscara en blanco sobre la imagen, pero parece que no la aplica. ¿Qué debo hacer diferente para enmascarar las esquinas de la imagen?iOS: enmascare un UIImage usando UIBezierPath

CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
UIBezierPath *roundedPath = [UIBezierPath bezierPathWithRoundedRect:maskLayer.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(16.f, 16.f)];  
maskLayer.fillColor = [[UIColor whiteColor] CGColor]; 
maskLayer.backgroundColor = [[UIColor clearColor] CGColor]; 
maskLayer.path = [roundedPath CGPath]; 

// Add mask 
self.imageView.layer.mask = maskLayer; 

Respuesta

6

Round two corners in UIView

Como se mencionó en la pregunta vinculado anteriormente, es probable que tenga que quitar la vista de la jerarquía antes de aplicar la máscara.

[self.imageView removeFromSuperview]; 
self.imageView.layer.mask = maskLayer; 
[self.view addSubview:self.imageView]; 

Además, su maskLayer no tiene bounds. Debe configurarlo en frame (o bounds) de la vista que está tratando de enmascarar.

CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
maskLayer.frame = self.imageView.frame; 
+0

darvidsOn puede decirme cómo puedo almacenar esta imagen enmascarada en un UIImage ... ??? –

+1

Lea la documentación de Apple. Comenzaría con ['UIImage'] (http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html), y también [' CGImage'] (http: //developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGImage/Reference/reference.html#//apple_ref/doc/uid/TP30000956-Reference-DontLinkElementID_1), que es el objeto de imagen subyacente dentro de un ' UIImage'. Verás que en 'CGImage' hay funciones para crear una imagen usando una máscara, y luego un constructor' UIImage' que toma tu nueva 'CGImage' como la imagen. – darvids0n

+0

Gracias por su respuesta. No pude encontrar nada. Es por eso que estoy preguntando ... –

Cuestiones relacionadas