2010-07-06 17 views
7

Quiero mostrar un UIToolbar con esquinas redondeadas en la parte superior, ¿cuál sería la forma más fácil? la barra de herramientas no está alineada en la parte superior de la ventana; tiene un margen alrededor. ¡Gracias!UIToolbar con esquinas redondeadas

Respuesta

16

Muy simple.

Antes que nada, tenga una variable IBOutlet de UIToolbar en su archivo .h de su controlador de vista. Por ejemplo.

@interface TextFormattedViewController : UIViewController { 
    IBOutlet UIToolbar *tBar; 
} 

Ahora en su archivo .m de la vista de archivo de controlador Sólo tiene que colocar siguiente código & que funcionará como una magia para usted. Sin embargo, por favor agregue un comentario si tiene alguna consulta.

#import "TextFormattedViewController.h" 
#import <QuartzCore/QuartzCore.h> 
@implementation TextFormattedViewController 
- (void)viewDidLoad { 
    // following statement is must. 
    tBar.clipsToBounds=YES; 
    CALayer *l=tBar.layer; 
    // set corner radious 
    [l setCornerRadius:10]; 
    // to apply border on corners 
    [l setBorderColor:[[UIColor redColor] CGColor]]; 
    // to apply set border width. 
    [l setBorderWidth:5.0]; 
} 
+1

Gracias azúcar por su gran sugerencia! Para una mejor apariencia, solo podemos cambiar setCornerRadius (y soltar las dos últimas llamadas). Produce agradables esquinas redondeadas antialias. Sin embargo, las cuatro esquinas están redondeadas ... – rjobidon

2

La manera más fácil de redondear las esquinas de una vista es con la propiedad cornerRadius (y masksToBounds) de CALayer. Sin embargo, con eso solo tienes la opción de redondear todas las esquinas por igual. Para usar esa propiedad, puede poner el UIToolbar en otra vista que era más alta que la barra de herramientas, por lo que solo se redondeó la parte superior. Esto funcionaría bien si otra vista hubiera redondeado las esquinas inferiores.

La manera más fácil de enmascarar una vista a una forma arbitraria es establecer la propiedad mask de CALayer en un nuevo CAShapeLayer. En su caso, construya un CGPath para el CAShapeLayer usando CGPathAddLineToPoint y CGPathAddArcToPoint o similar para obtener solo las esquinas superiores redondeadas.

+0

+1 por la sugerencia sobre el enmascaramiento. – Anton