我有一个alpha设置为0.6的UIToolbar。看起来很不错 - 但是它也会将按钮的alpha设置为0.6,这还可以,但并不是很理想。有没有办法单独设置UIBarButtonItem的alpha?如何使它们看起来是白色而不是略带灰色?
我有一个alpha设置为0.6的UIToolbar。看起来很不错 - 但是它也会将按钮的alpha设置为0.6,这还可以,但并不是很理想。有没有办法单独设置UIBarButtonItem的alpha?如何使它们看起来是白色而不是略带灰色?
当您在视图上设置 alpha 值时,所有子视图都将使用相同的 alpha 值进行组合。您可以使用带有 alpha 值的 tint 颜色或背景颜色,而不是在视图本身上设置 alpha 值。这可以产生类似的效果,而不会导致所有子视图继承透明度。
toolbar.tintColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
如果这个方法不起作用,而你确实需要使视图本身透明,那么你将不得不重新设计你的视图层次结构,以便不将不透明的视图作为子视图。由于工具栏按钮项不是标准视图,因此在工具栏情况下可能无法使用。
self.bottomToolbar.barStyle = UIBarStyleBlack;
self.bottomToolbar.translucent = YES;
self.bottomToolbar.backgroundColor = [UIColor clearColor];
将视图的不透明度设为1,这些设置对我起了作用。
上面的方法在iOS 4.3上对我无效,但是这个可以:
子类化UIToolbar,提供一个方法:
- (void)drawRect:(CGRect)rect
{
[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
}
self.toolbar.barStyle = UIBarStyleDefault;
self.toolbar.tintColor = [UIColor colorWithWhite:0.0 alpha:0.5];
self.toolbar.translucent = YES;
这些代码对我很有用(ios4.3)。 据我所知,将工具栏的transfluent属性设置为YES,就是将其设置为透明背景。当然,这取决于您设置的色调颜色。如果它不包含alpha分量,则该栏将是不透明的。
backgroundColor
,则生成的颜色将与barStyle
(UIBarStyleDefault或UIBarStyleBlack)结合使用,这会导致比原始backgroundColor
更不透明的颜色。如果您设置barTintColor
,则似乎会覆盖所有其他设置,包括您设置的任何alpha值,从而产生完全不透明的颜色。setBackgroundImage:forToolbarPosition:barMetrics:
设置其背景图像。您可以创建一个1px x 1px的图像,并设置所需的颜色和alpha值:+ (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版本]
然后设置背景图片:
[toolbar setBackgroundImage:[self onePixelImageWithColor:[[UIColor blackColor] colorWithAlphaComponent:0.7]]
forToolbarPosition:UIBarPositionBottom
barMetrics:UIBarMetricsDefault];
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
}