2011-02-14 20 views
6

Tengo una barra de trabajo de UIT con el valor alfa de .6. Se ve muy bien, pero también deja los botones con un alfa de .6, lo cual está bien pero no es realmente deseable. ¿Hay alguna manera de establecer independientemente el alfa de un UIBarButtonItem? ¿Cómo conseguiría que estos se vean blancos en lugar de ligeramente atenuados?UIToolBar con alfa reducida, quiere que UIBarButtonItem tenga alpha 1

Respuesta

12

Cuando establece el alfa en una vista, todas las subvistas se componen con el mismo valor alfa. Lo que puede hacer en lugar de configurar el alfa en la vista es utilizar un color de tinte o color de fondo con un valor alfa. Esto puede producir efectos similares, sin que todas las subvistas hereden la transparencia.

toolbar.tintColor = [[UIColor blackColor] colorWithAlphaComponent:0.6]; 

Si esto no funciona y que realmente necesita para hacer la vista en sí transparente, tendrá que volver a trabajar la jerarquía de vista para que los puntos de vista opacas no son subvistas. Dado que los elementos del botón de barra no están disponibles como vistas estándar, probablemente no sea factible en el caso de la barra de herramientas.

+1

self.bottomToolbar.barStyle = UIBarStyleBlack; self.bottomToolbar.translucent = YES; self.bottomToolbar.backgroundColor = [UIColor clearColor]; –

+0

Esta respuesta http://stackoverflow.com/a/5149484/1250436 es mejor. – ohcibi

12
self.bottomToolbar.barStyle = UIBarStyleBlack; 
self.bottomToolbar.translucent = YES; 
self.bottomToolbar.backgroundColor = [UIColor clearColor]; 

Ver la opacidad establecida en 1 y esta configuración lo hizo por mí.

+1

Esta es la mejor respuesta – respectTheCode

+0

También puede configurar esto en InterfaceBuilder/Storyboard (Estilo "Translucent Black") – ohcibi

1

encima no funcionó para mí en iOS 4.3, pero esto hizo:

Subclase UIToolbar, proporcionar un método:

- (void)drawRect:(CGRect)rect 
{ 
[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc 
CGContextFillRect(UIGraphicsGetCurrentContext(), rect); 
} 
1

he encontrado que barStyle does'n realmente importa. Tampoco se establece el color de fondo para borrar.

self.toolbar.barStyle = UIBarStyleDefault; 
self.toolbar.tintColor = [UIColor colorWithWhite:0.0 alpha:0.5]; 
self.toolbar.translucent = YES; 

Esas líneas hicieron el trabajo por mí (ios4.3). Como puedo entender, al configurar las propiedades transfluent de las barras de herramientas en YES, las configura con fondo claro (transparente). Por supuesto, depende del color de tinte que haya establecido. Si no contiene componente alfa, la barra será opaca.

1

El problema principal con el control del valor alfa de la barra de herramientas es que se aplica a toda la barra de herramientas y sus botones. Si configura un backgroundColor con un valor alfa de < 1, el color resultante se combina con el barStyle (UIBarStyleDefault o UIBarStyleBlack) que da como resultado un color más opaco que el backgroundColor original. Si configura el barTintColor, parece anular todas las otras configuraciones, incluido cualquier valor alfa que establezca, lo que da como resultado un color completamente opaco.

La única manera que he podido hacer para reducir el alfa de la barra de herramientas sin afectar sus botones es por setting its background image via setBackgroundImage:forToolbarPosition:barMetrics:. Se puede crear un 1px por imagen 1 píxel con el color y alfa deseado:

+ (UIImage *)onePixelImageWithColor:(UIColor *)color { 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef context = CGBitmapContextCreate(NULL, 1, 1, 8, 0, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedFirst); 
    CGContextSetFillColorWithColor(context, color.CGColor); 
    CGContextFillRect(context, CGRectMake(0, 0, 1, 1)); 
    CGImageRef imgRef = CGBitmapContextCreateImage(context); 
    UIImage *image = [UIImage imageWithCGImage:imgRef]; 
    CGImageRelease(imgRef); 
    CGContextRelease(context); 
    CGColorSpaceRelease(colorSpace); 
    return image; 
}

[Swift version]

A continuación, establezca el Fondo de la imagen:

[toolbar setBackgroundImage:[self onePixelImageWithColor:[[UIColor blackColor] colorWithAlphaComponent:0.7]] 
     forToolbarPosition:UIBarPositionBottom 
       barMetrics:UIBarMetricsDefault]; 
+0

Esta es la respuesta correcta para iOS 9 – user8030

0

Después de muchas horas de evaluación de cada métodos anteriores, Descubrí que solo el método proporcionado por Ryan H. es factible. Es porque este es el método que puede manipular el valor alfa mientras que otros no pueden.

Aquí está la versión de Swift 3:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let bgImageColor = UIColor.black.withAlphaComponent(0.6) //you can adjust the alpha value here 
    self.upperToolBar.setBackgroundImage(onePixelImageWithColor(color: bgImageColor), 
      forToolbarPosition: .any, 
      barMetrics: UIBarMetrics.default) 
} 

func onePixelImageWithColor(color : UIColor) -> UIImage { 
    let colorSpace = CGColorSpaceCreateDeviceRGB() 
    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue) 
    var context = CGContext(data: nil, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue) 
    context!.setFillColor(color.cgColor) 
    context!.fill(CGRect(x:0,y: 0, width: 1, height:1)) 
    let image = UIImage(cgImage: context!.makeImage()!) 
    return image 
} 
Cuestiones relacionadas