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!
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
- 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
- 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;
}