具有减少的alpha的UIToolBar,希望UIBarButtonItem具有alpha 1

时间:2011-02-14 20:29:23

标签: ios uibarbuttonitem uitoolbar

我有一个UIToolbar,alpha设置为.6。看起来很棒 - 但它也留下了.6的alpha按钮,这是好的,但不是很理想。有没有办法独立设置UIBarButtonItem的alpha?我怎么能让它们看起来是白色而不是略带灰色?

6 个答案:

答案 0 :(得分:12)

在视图上设置alpha时,所有子视图都会使用相同的Alpha值进行合成。你可以做的不是在视图上设置alpha,而是使用带有alpha值的色调颜色或背景颜色。这可以产生类似的效果,而不会导致所有子视图继承透明度。

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

如果这不起作用并且您实际上需要使视图本身透明,则必须重新编写视图层次结构,以使不透明视图不是子视图。由于条形按钮项目不可用作标准视图,因此它可能无法在工具栏中使用。

答案 1 :(得分:12)

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

查看不透明度设置为1,这些设置为我做了。

答案 2 :(得分:1)

上面在iOS 4.3中对我不起作用,但是这样做了:

子类UIToolbar,提供一种方法:

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

答案 3 :(得分:1)

我发现barStyle确实不重要。也没有将背景颜色设置为清除。

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

这些线为我完成了工作(ios4.3)。 据我所知,将工具栏的transfluent属性设置为YES,您将其设置为具有清晰(透明)背景。当然,这取决于你设置的色调。如果它不包含alpha分量,那么条形图将是不透明的。

答案 4 :(得分:1)

控制工具栏alpha值的主要问题是它适用于整个工具栏及其按钮。如果您将backgroundColor设置为某个alpha值< 1,结果颜色与barStyle(UIBarStyleDefault或UIBarStyleBlack)组合,导致颜色比原始backgroundColor更不透明。如果设置barTintColor,它似乎会覆盖所有其他设置,包括您设置的任何Alpha值,从而产生完全不透明的颜色。

我能够做的唯一方法是减少工具栏的alpha而不影响其按钮是setting its background image via setBackgroundImage:forToolbarPosition:barMetrics:。您可以使用所需的颜色和alpha创建1px x 1xx图像:

+ (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]

然后设置背景图像:

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

答案 5 :(得分:0)

在评估上述每种方法数小时后,我发现只有Ryan H.提供的方法是可行的。这是因为这是你可以操纵alpha值的方法,而其他人则不能。

以下是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
}