para - ios create framework




Dando esquinas redondeadas UIView (13)

Rápido

Respuesta corta:

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

Respuesta suplementaria

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

Si comienzas con una vista normal, tiene esquinas cuadradas.

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

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

blueView.layer.cornerRadius = 8

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

blueView.layer.cornerRadius = 25

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

blueView.layer.cornerRadius = 3

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 se sale de los límites de la vista. Por ejemplo, si tuviera que añadir una subvista como esta

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 añadir una subcapa como esta

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

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

blueView.clipsToBounds = true

o esto

blueView.layer.masksToBounds = true

lo que da este resultado:

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

Ver también

  • Como agregar bordes y sombras.
  • Caminos bezier
  • Transformations

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

¿Hay alguna manera de hacerlo dentro de mi xib?


Swift 4 - Utilizando IBDesignable

   @IBDesignable
    class DesignableView: UIView {
    }

    extension UIView
    {

        @IBInspectable
        var cornerRadius: CGFloat {
            get {
                return layer.cornerRadius
            }
            set {
            layer.cornerRadius = newValue
        }
    }
}

Como se describe en esta publicación del 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];
}

La parte interesante de esto es que puedes seleccionar qué esquinas quieres redondear hacia arriba.


EN Xcode 6 tu intento

     self.layer.layer.cornerRadius = 5.0f;

o

    self.layer.layer.cornerRadius = 5.0f;
    self.layer.clipsToBounds = YES;

Hacer esto programáticamente en obj c

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;][1]

[self.view addSubview:view];

También podemos hacer esto desde el stoaryboard.

 layer.cornerRadius  Number  5


Por favor, importe el Quartzcore framework entonces tiene que establecer setMaskToBounds en TRUE esta es una línea muy importante.

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


Prueba esto

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

...

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

Nota: Si está intentando aplicar esquinas redondeadas a la vista de un UIViewController , no debe aplicarse en el constructor del controlador de la vista, sino en -viewDidLoad , después de que la view esté realmente instanciada.


Puede usar la siguiente clase UIView personalizada que también puede cambiar el color y el ancho del borde. Como se trata de IBDesignalbe , también puede cambiar los atributos en el constructor de interfaces.

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

}

También puedes usar una imagen:

UIImage *maskingImage = [UIImage imageNamed:@"bannerBarBottomMask.png"];
CALayer *maskingLayer = [CALayer layer];
maskingLayer.frame = CGRectMake(-(self.yourView.frame.size.width - self.yourView.frame.size.width) / 2
                                , 0
                                , maskingImage.size.width
                                , maskingImage.size.height);
[maskingLayer setContents:(id)[maskingImage CGImage]];
[self.yourView.layer setMask:maskingLayer];

Un enfoque diferente al que hizo Ed Marty:

#import <QuartzCore/QuartzCore.h>

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

Necesitas setMasksToBounds para cargar todos los objetos de IB ... Tengo un problema donde mi vista se redondea, pero no tiene los objetos de IB: /

esto lo arregló = D espero que ayude!


si la esquina redonda no funciona en viewDidload () es mejor escribir código en viewDidLayoutSubview ()

-(void)viewDidLayoutSubviews
{
    viewTextfield.layer.cornerRadius = 10.0 ;                                               
    viewTextfield.layer.borderWidth = 1.0f;
    viewTextfield.layer.masksToBounds =  YES;
    viewTextfield.layer.shadowRadius = 5;
    viewTextfield.layer.shadowOpacity = 0.3;
    viewTextfield.clipsToBounds = NO;
    viewTextfield.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
}

¡Espero que esto ayude!


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];

view.layer.cornerRadius = 25
view.layer.masksToBounds = true






uiview