iphone ios uiimageview rounded-corners

iphone - uiimageview set image swift



Establecer radio de esquina en UIImageView no funciona (7)

Estoy un poco perdido. Utilicé la propiedad de capa de UIView para redondear las esquinas de múltiples elementos en mi aplicación. Sin embargo, este UIImageView simplemente no está cumpliendo. No estoy seguro de lo que me estoy perdiendo.

El UIImageView (llamado previewImage) está contenido en una celda de vista de tabla. Intenté configurar la ubicación de la propiedad cornerRadius en varias ubicaciones (en la celda misma y en el controlador que crea la celda) en vano.

static NSString *CellIdentifier = @"MyTableViewCell"; MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil]; cell = [topLevelObjects objectAtIndex:0]; cell.previewImage.layer.cornerRadius = 20; //Made it 20 to make sure it''s obvious. }

¿Hay algo sobre la forma en que se cargan las células que me faltan?


Creo que debes establecer:

cell.previewImage.layer.masksToBounds = YES; cell.previewImage.layer.opaque = NO;


En Xcode Interface Builder, seleccionando ''Clip Subviews'' Drawing attribute para la vista junto con establecer el radio de la esquina en el código cell.previewImage.layer.cornerRadius = 20; hace el trabajo por mi!

Vea la opción ''Clip Subviews'' en IB


Esto debería funcionar

cell.previewImage.clipsToBounds = YES; cell.previewImage.layer.cornerRadius = 20;


Necesita establecer la propiedad masksToBounds la capa en YES :

cell.previewImage.layer.masksToBounds = YES;

Esto se debe a que el control UIImageView crea una pseudo-subvista para contener el objeto UIImage .


Prueba este fragmento de código a continuación

cell.previewImage.layer.cornerRadius = 20; cell.previewImage.clipsToBounds = YES;


También vale la pena señalar que

  1. Si está utilizando aspectFit AND cornerRadius con clipsToBounds / masksToBounds, no obtendrá las esquinas redondeadas.

es decir, si tienes esto

theImageView.contentMode = .scaleAspectFit

y

theImageView.layer.cornerRadius = (theImageView.frame.size.height)/2 theImageView.clipsToBounds = true

o

theImageView.layer.masksToBounds = true

No funcionará deberás deshacerte del código de aspectFit

//theImageView.contentMode = .scaleAspectFit

  1. Asegúrese de que el ancho y la altura de la Vista de imagen sea el mismo

-(void) viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self setMaskTo:viewDistance byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight]; } - (void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners { UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(20.0, 20.0)]; CAShapeLayer *shape = [[CAShapeLayer alloc] init]; shape.frame = self.view.bounds; [shape setPath:rounded.CGPath]; view.layer.mask = shape; }