Pregunta Dando esquinas redondeadas UIView


Mi vista de inicio de sesión tiene una subvista que tiene una UIActivityView y un UILabel diciendo "Iniciando sesión ...". Esta subvista tiene esquinas que no son redondeadas. ¿Cómo puedo hacerlos redondos?

¿Hay alguna forma de hacerlo dentro de mi xib?


522
2017-10-02 13:36


origen


Respuestas:


Prueba esto

#import <QuartzCore/QuartzCore.h> // not necessary for 10 years now  :)

...

view.layer.cornerRadius = 5;
view.layer.masksToBounds = true;

Nota: Si está tratando de aplicar esquinas redondeadas a un UIViewControllervista, no se debe aplicar en el constructor del controlador de vista, sino en -viewDidLoad, después view en realidad está instanciado.


1150
2017-10-02 13:40



También puedes usar el Atributos de tiempo de ejecución definidos por el usuario característica del constructor de interfaz para establecer la ruta clave layer.cornerRadius a un valor Asegúrate de incluir el QuartzCore biblioteca sin embargo.

Este truco también funciona para configurar layer.borderWidth sin embargo no funcionará layer.borderColor como esto espera una CGColor No un UIColor.

No podrá ver los efectos en el guión gráfico porque estos parámetros se evalúan en tiempo de ejecución.

Using Interface builder to set the corner radius


248
2017-07-15 22:17



Ahora puede usar una categoría rápida en UIView (código debajo de la imagen) con @IBInspectable para mostrar el resultado en el guión gráfico (si está utilizando la categoría, use solo cornerRadius y no layer.cornerRadius como ruta clave.

extension UIView {
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }
}

enter image description here


58
2018-01-16 16:26



Un enfoque diferente al que hizo Ed Marty:

#import <QuartzCore/QuartzCore.h>

[v.layer setCornerRadius:25.0f];
[v.layer setMasksToBounds:YES];

Necesitas los setMasksToBounds para que cargue todos los objetos de IB ... tuve un problema donde mi vista se redondeó, pero no tenía los objetos de IB: /

esto lo solucionó = D espero que ayude!


43
2017-12-09 12:23



Rápido

Respuesta corta:

myView.layer.cornerRadius = 8
myView.layer.masksToBounds = true  // optional

Respuesta suplementaria

Si ha llegado a esta respuesta, probablemente ya haya visto lo suficiente para resolver su problema. Estoy agregando esta respuesta para dar una explicación un poco más visual de por qué las cosas hacen lo que hacen.

Si comienzas con un UIView tiene esquinas cuadradas.

let blueView = UIView()
blueView.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
blueView.backgroundColor = UIColor.blueColor()
view.addSubview(blueView)

enter image description here

Puedes darle esquinas redondeadas cambiando el cornerRadius propiedad de la vista layer.

blueView.layer.cornerRadius = 8

enter image description here

Los valores de radio más grandes dan esquinas más redondeadas

blueView.layer.cornerRadius = 25

enter image description here

y valores más pequeños dan esquinas menos redondeadas.

blueView.layer.cornerRadius = 3

enter image description here

Esto podría ser suficiente para resolver su problema allí mismo. Sin embargo, a veces una vista puede tener una subvista o una subcapa que va más allá de los límites de la vista. Por ejemplo, si tuviera que agregar un submarinover Me gusta esto

let mySubView = UIView()
mySubView.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
mySubView.backgroundColor = UIColor.redColor()
blueView.addSubview(mySubView)

o si tuviera que agregar un submarinocapa Me gusta esto

let mySubLayer = CALayer()
mySubLayer.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
mySubLayer.backgroundColor = UIColor.redColor().CGColor
blueView.layer.addSublayer(mySubLayer)

Entonces terminaría con

enter image description here

Ahora, si no quiero que las cosas cuelguen fuera de los límites, puedo hacerlo

blueView.clipsToBounds = true

o esto

blueView.layer.masksToBounds = true

que da este resultado:

enter image description here

Ambos clipsToBounds y masksToBounds son equivalente. Es solo que el primero se usa con UIView y el segundo se usa con CALayer.

Ver también


37
2018-01-25 01:07



Como se describe en esta publicación en el blog, aquí hay un método para redondear las esquinas de una UIView:

+(void)roundView:(UIView *)view onCorner:(UIRectCorner)rectCorner radius:(float)radius
{
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds
                                                   byRoundingCorners:rectCorner
                                                         cornerRadii:CGSizeMake(radius, radius)];
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    maskLayer.frame = view.bounds;
    maskLayer.path = maskPath.CGPath;
    [view.layer setMask:maskLayer];
    [maskLayer release];
}

Lo bueno de esto es que puedes seleccionar las esquinas que deseas redondear.


26
2017-09-10 11:09



Primero debe importar el archivo de encabezado <QuartzCore/QuartzCore.h>

 #import QuartzCore/QuartzCore.h>

[yourView.layer setCornerRadius:8.0f];
yourView.layer.borderColor = [UIColor redColor].CGColor;
yourView.layer.borderWidth = 2.0f;
[yourView.layer setMasksToBounds:YES];

No te pierdas el uso -setMasksToBounds De lo contrario, es posible que no se muestre el efecto.


19
2017-08-01 10:19



Puede usar la siguiente clase personalizada de UIView escrita en Swift 3.0 que también puede cambiar el color y el ancho del borde. Como esto es IBDesignalbe, también puedes cambiar los atributos en el constructor de interfaz.

enter image description here

import UIKit

@IBDesignable public class RoundedView: UIView {

    @IBInspectable var borderColor: UIColor = UIColor.white {
        didSet {
            layer.borderColor = borderColor.cgColor
        }
    }

    @IBInspectable var borderWidth: CGFloat = 2.0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0.0 {
        didSet {
            layer.cornerRadius = cornerRadius
        }
    }

}

7
2017-10-26 08:31



UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 50, 200, 200)];

view.layer.backgroundColor = [UIColor whiteColor].CGColor;
view.layer.cornerRadius = 20.0;
view.layer.frame = CGRectInset(v.layer.frame, 20, 20);

view.layer.shadowOffset = CGSizeMake(1, 0);
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowRadius = 5;
view.layer.shadowOpacity = .25;

[self.view addSubview:view];
[view release];

6
2018-05-23 11:51



Por favor importar Quartzcore framework entonces tienes que establecer setMaskToBounds a TRUE esta es la línea muy importante.

Entonces: [[yourView layer] setCornerRadius:5.0f];


2
2018-02-16 09:52