Pregunta

Me gustaría añadir algunas esquinas redondeadas para todos los UIImageViews en mi proyecto. Ya he conseguido el código de trabajo, pero estoy teniendo aplicarla a cada imagen; debo subclase UIImageView añadir esto? Si es así, alguien puede darme algunos consejos sobre cómo hacer esto?

Este es el código

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *mainpath = [[NSBundle mainBundle] bundlePath];
    welcomeImageView.image = [UIImage imageWithContentsOfFile:[mainpath stringByAppendingString:@"/test.png"]];
    welcomeImageView.layer.cornerRadius = 9.0;
    welcomeImageView.layer.masksToBounds = YES;
    welcomeImageView.layer.borderColor = [UIColor blackColor].CGColor;
    welcomeImageView.layer.borderWidth = 3.0;
    CGRect frame = welcomeImageView.frame;
    frame.size.width = 100;
    frame.size.height = 100;
    welcomeImageView.frame = frame;
}
¿Fue útil?

Solución

Se podría utilizar una categoría para UIImage que es una forma alternativa de una subclase de una clase y, a veces más fácil para los cambios solo pequeñas.

por ejemplo añadir un método que devuelve una UIImage con la esquina redondeada atributos establecidos.

+(UIImage *)imageWithContentsOfFile:(NSString *)file cornerRadius:(NSInteger)... 

más información sobre las categorías de Objective-C se puede encontrar http: // macdevelopertips. com / Objective-C / Objective-C-categories.html

Otros consejos

Marque esta - esquinas redondeadas en UIImage

La modificación capa parece ser la mejor manera.

UIImageView * roundedView = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"wood.jpg"]];
// Get the Layer of any view
CALayer * l = [roundedView layer];
[l setMasksToBounds:YES];
[l setCornerRadius:10.0];

En lugar de subclases, se puede lograr una funcionalidad más poderosa a través de categorías simples en UIImageView y CALayer.

Crear una categoría en UIImageView como esto:

- (void)maskRoundCorners:(UIRectCorner)corners radius:(CGFloat)radius {
    // To round all corners, we can just set the radius on the layer
    if ( corners == UIRectCornerAllCorners ) {
        self.layer.cornerRadius = radius;
        self.layer.masksToBounds = YES;
    } else {
        // If we want to choose which corners we want to mask then
        // it is necessary to create a mask layer.
        self.layer.mask = [CALayer maskLayerWithCorners:corners radii:CGSizeMake(radius, radius) frame:self.bounds];
    }
}

Esto llama a un método en la categoría CALayer:

+ (id)maskLayerWithCorners:(UIRectCorner)corners radii:(CGSize)radii frame:(CGRect)frame {

    // Create a CAShapeLayer
    CAShapeLayer *mask = [CAShapeLayer layer];

    // Set the frame
    mask.frame = frame;

    // Set the CGPath from a UIBezierPath
    mask.path = [UIBezierPath bezierPathWithRoundedRect:mask.bounds byRoundingCorners:corners cornerRadii:radii].CGPath;

    // Set the fill color
    mask.fillColor = [UIColor whiteColor].CGColor;

    return mask;
}

Por lo tanto, esto le permite redondear cualquier combinación (ver UIRectCorner) de esquinas, lo cual es especialmente útil si usted quiere poner una imagen en un estilo UITableView grupo. Hay una advertencia al hacer esto, sin embargo. Debido a que no hemos subclases UIImageView, no podemos inyectar código en cualquier layoutSubviews, lo que significa que la capa de máscara puede no ser correcta. De hecho, cuando se configuran las células, los límites de la vista de la imagen incluso no se establecen cuando se llama al método categoría. Por lo tanto, es necesario asegurarse de los límites de la vista de la imagen se fija antes de añadir esquinas redondeadas (excepto si se utiliza UIRectCornersAllCorners).

Aquí hay un código que hace esto:

        // Perform corner rounding
        UIRectCorner corners = !UIRectCornerAllCorners;
        if (indexPath.row == 0) 
            corners = UIRectCornerTopLeft;
        if (indexPath.row == numberOfRowsInTheTable)  
            corners |= UIRectCornerBottomLeft;

        if (corners > 0) {
            cell.imageView.bounds = CGRectMake(0.f, 0.f, [self.tableView rowHeight], [self.tableView rowHeight]);
            [cell.imageView maskRoundCorners:corners radius:10.f];
        } else {
            [cell.imageView removeRoundCornersMask];
        }

Tengo otra categoría que elimina las esquinas redondeadas -. Todo lo que hace es eliminar cualquier máscaras y establecer el cornerRadius a 0

Sí, usted debe subclase UIImageView, y usar su subclase personalizada en todo el proyecto.

Puede subclase UIImageView y luego si poner en práctica su setNeedsDisplay Método de las esquinas redondas trabajarán en subclases. (No se olvide de importar QuartzCore)

-(void)setNeedsDisplay {
    self.layer.cornerRadius = 5;
    self.layer.masksToBounds = YES;
    [self.layer setBorderColor:[[UIColor whiteColor] CGColor]];
    [self.layer setBorderWidth: 2.0];
}

Prueba de esto,

coverImage.image = [UIImage imageWithContentsOfFile:@"coverImage.png"]; 
coverImage.layer.masksToBounds = YES;
coverImage.layer.cornerRadius = 10.0;
coverImage.layer.borderWidth = 1.0;
coverImage.layer.borderColor = [[UIColor brown] CGColor];

esto puede ayudar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top