ios swift uiimageview cornerradius

ios - ¿Cómo establecer el radio de la esquina de imageView?



swift uiimageview (10)

Hay una pequeña diferencia en Swift 3.0 y Xcode8

Siempre que desee aplicar el radio de esquina a UIView, asegúrese de llamar a su yourUIView.layoutIfNeeded() antes de llamar a cornerRadius .

De lo contrario, devolverá el valor predeterminado para la altura y el ancho de UIView (1000.0), lo que probablemente hará que su vista desaparezca.

Asegúrese siempre de que todos los efectos que cambian el tamaño de UIView (restricciones del generador de interfaz, etc.) se apliquen antes de establecer las propiedades de capa.

Ejemplo de implementación de clase UIView

class BadgeView: UIView { override func awakeFromNib() { self.layoutIfNeeded() layer.cornerRadius = self.frame.height / 2.0 layer.masksToBounds = true } }

En Objective-C tal línea

self.mainImageView.layer.cornerRadius = CGRectGetWidth(self.mainImageView.frame)/4.0f;

hace su trabajo, lo probé en Swift usando analogía

self.mainImageView.layer.cornerRadius = CGRectGetWidth(self.mainImageView.frame)/4.0

y no cambia nada, las esquinas son las mismas que antes. Además, Xcode no muestra ningún error de sintaxis. ¿Swift admite alguna otra forma de alcanzar este objetivo? Revisé algunos otros hilos aquí y generalmente se está haciendo en Swift de la manera que se muestra arriba.


La capa se extrae de la región de recorte, debe configurarla para enmascarar los límites:

self.mainImageView.layer.masksToBounds = true

De los docs :

Por defecto, el radio de la esquina no se aplica a la imagen en la propiedad de contenido de la capa; solo se aplica al color de fondo y al borde de la capa. Sin embargo, al establecer la propiedad masksToBounds en true, el contenido se recorta en las esquinas redondeadas


La forma más fácil es crear una subclase UIImageView (lo he probado y funciona perfectamente en iPhone 7 y XCode 8):

class CIRoundedImageView: UIImageView { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override func awakeFromNib() { self.layoutIfNeeded() layer.cornerRadius = self.frame.height / 2.0 layer.masksToBounds = true } }

y luego también puedes establecer un borde:

imageView.layer.borderWidth = 2.0 imageView.layer.borderColor = UIColor.blackColor().CGColor


Marcados con @IBInspectable en swift (o IBInspectable en Objective-C), son fácilmente editables en el panel del inspector de atributos de Interface Builder.
Puede configurar directamente borderWidth , cornerRadius , borderColor en el inspector de atributos

view.layer.cornerRadius = view.frame.width/4.0 view.clipsToBounds = true


Prueba esto en Swift:

self.photoView.layer.cornerRadius = self.photoView.frame.height/2


Puede definir el radio del borde de cualquier vista proporcionando un "Atributos de tiempo de ejecución definidos por el usuario", proporcionando la ruta de acceso clave "layer.cornerRadius" de tipo cadena y luego el valor del radio que necesita;) Vea las imágenes adjuntas a continuación:


Swift 3, Xcode 8, iOS 10

DispatchQueue.main.async { self.mainImageView.layer.cornerRadius = self.mainImageView.bounds.size.width / 2.0 self.mainImageView.clipsToBounds = true }


en swift 3 ''CGRectGetWidth'' ha sido reemplazado por la propiedad ''CGRect.width''

extension UIView { @IBInspectable var cornerRadius: CGFloat { get{ return layer.cornerRadius } set { layer.cornerRadius = newValue layer.masksToBounds = newValue > 0 } } @IBInspectable var borderWidth: CGFloat { get { return layer.borderWidth } set { layer.borderWidth = newValue } } @IBInspectable var borderColor: UIColor? { get { return UIColor(cgColor: layer.borderColor!) } set { layer.borderColor = borderColor?.cgColor } } }


prueba esto

self.mainImageView.layer.cornerRadius = CGRectGetWidth(self.mainImageView.frame)/4.0 self.mainImageView.clipsToBounds = true


UIView una extensión UIView que permite redondear esquinas específicas:

import UIKit enum RoundType { case top case none case bottom case both } extension UIView { func round(with type: RoundType, radius: CGFloat = 3.0) { var corners: UIRectCorner switch type { case .top: corners = [.topLeft, .topRight] case .none: corners = [] case .bottom: corners = [.bottomLeft, .bottomRight] case .both: corners = [.allCorners] } DispatchQueue.main.async { let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) let mask = CAShapeLayer() mask.path = path.cgPath self.layer.mask = mask } } }