round icon app iphone objective-c ipad rounded-corners

iphone - icon - ¿Solo dos esquinas redondeadas?



ios icons resolution (3)

El maravilloso trabajo realizado por Tomek Kuźma. Aquí está la nueva clase TKRoundedView para sus requisitos.
Su requisito puede ser cumplido por este parámetro solamente.

TKRoundedView *view = [[TKRoundedView alloc] initWithFrame:frame]; view.roundedCorners = TKRoundedCornerTopLeft | TKRoundedCornerTopRight;

Pero también proporciona las siguientes características adicionales.

TKRoundedView *view = [[TKRoundedView alloc] initWithFrame:frame]; view.roundedCorners = TKRoundedCornerTopLeft view.borderColor = [UIColor greenColor]; view.fillColor = [UIColor whiteColor]; view.drawnBordersSides = TKDrawnBorderSidesLeft | TKDrawnBorderSidesTop; view.borderWidth = 5.0f; view.cornerRadius = 15.0f;

Por favor revisa el siguiente enlace para el proyecto de ejemplo
https://github.com/mapedd/TKRoundedView

Esta pregunta ya tiene una respuesta aquí:

En la aplicación de mi iPad, quiero que aparezca una segunda vista en la pantalla principal cuando el usuario haga clic en un botón. La nueva vista será más pequeña que la primera y oscurecerá el fondo cuando se muestre. Quiero que las dos esquinas superiores de la nueva vista aparezcan redondeadas, pero al usar cornerRadius las redondea todas. ¿Cómo puedo hacer solo dos esquinas redondeadas?


En objetivo c

// Create the path (with only the top-left corner rounded) UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:UIRectCornerTopLeft| UIRectCornerTopRight cornerRadii:CGSizeMake(10.0, 10.0)]; // Create the shape layer and set its path CAShapeLayer *maskLayer = [CAShapeLayer layer]; maskLayer.frame = imageView.bounds; maskLayer.path = maskPath.CGPath; // Set the newly created shape layer as the mask for the image view''s layer imageView.layer.mask = maskLayer;

Esta es otra de usar esquina superior redondeada. Ronda dos esquinas en UIView

En Swift!

myView.clipsToBounds = true myView.layer.cornerRadius = 10 myView.layer.maskedCorners = [.layerMinXMinYCorner,.layerMaxXMinYCorner]


Tienes que hacer esto en drawRect :. En realidad modifiqué el addRoundedRectToPath clásico: para que tome un mapa de bits y redondee las esquinas que solicitas:

static void addRoundedRectToPath(CGContextRef context, CGRect rect, float radius, UIImageRoundedCorner cornerMask) { CGContextMoveToPoint(context, rect.origin.x, rect.origin.y + radius); CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height - radius); if (cornerMask & UIImageRoundedCornerTopLeft) { CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + rect.size.height - radius, radius, M_PI, M_PI / 2, 1); } else { CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height); CGContextAddLineToPoint(context, rect.origin.x + radius, rect.origin.y + rect.size.height); } CGContextAddLineToPoint(context, rect.origin.x + rect.size.width - radius, rect.origin.y + rect.size.height); if (cornerMask & UIImageRoundedCornerTopRight) { CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + rect.size.height - radius, radius, M_PI / 2, 0.0f, 1); } else { CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + rect.size.height); CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + rect.size.height - radius); } CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + radius); if (cornerMask & UIImageRoundedCornerBottomRight) { CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + radius, radius, 0.0f, -M_PI / 2, 1); } else { CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y); CGContextAddLineToPoint(context, rect.origin.x + rect.size.width - radius, rect.origin.y); } CGContextAddLineToPoint(context, rect.origin.x + radius, rect.origin.y); if (cornerMask & UIImageRoundedCornerBottomLeft) { CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + radius, radius, -M_PI / 2, M_PI, 1); } else { CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y); CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + radius); } CGContextClosePath(context); }

Esto requiere una máscara de bits (lo llamé UIImageRoundedCorner porque estaba haciendo esto para las imágenes, pero puedes llamarlo como quieras) y luego crea una ruta basada en las esquinas que deseas redondear. A continuación, aplica ese camino a la vista en drawRect:

CGContextBeginPath(context); addRoundedRectToPath(context, rect, radius, yourMask); CGContextClosePath(context); CGContextClip(context);

Como dije, estaba haciendo esto para UIImages, por lo que mi código no está configurado exactamente para su uso en drawRect :, pero debería ser bastante fácil de adaptarlo. Básicamente, estás construyendo un camino y luego recortando el contexto.

Edición: para explicar la parte de la máscara de bits, es solo una enumeración:

typedef enum { UIImageRoundedCornerTopLeft = 1, UIImageRoundedCornerTopRight = 1 << 1, UIImageRoundedCornerBottomRight = 1 << 2, UIImageRoundedCornerBottomLeft = 1 << 3 } UIImageRoundedCorner;

De esta manera, se pueden O cosas juntas para formar una máscara de bits que identifique esquinas, ya que cada miembro de la enumeración representa un poder diferente de dos en la máscara de bits.

Edición mucho más tarde: descubrí una manera más fácil de hacer esto usando UIBezierPath de bezierPathWithRoundedRect:byRoundingCorners:cornerRadii: Solo usa el CGPath del objeto de ruta de CGPath en tu contexto.