UIToolBar 具有降低的 alpha,希望 UIBarButtonItem 具有 alpha 1
Posted
技术标签:
【中文标题】UIToolBar 具有降低的 alpha,希望 UIBarButtonItem 具有 alpha 1【英文标题】:UIToolBar with reduced alpha, want UIBarButtonItem to have alpha 1 【发布时间】:2011-02-14 20:29:22 【问题描述】:我有一个 alpha 设置为 0.6 的 UIToolbar。看起来很棒 - 但它也使按钮的 alpha 为 0.6,这还可以,但并不是很理想。有没有办法独立设置 UIBarButtonItem 的 alpha?我怎样才能让这些看起来是白色而不是略微变灰?
【问题讨论】:
【参考方案1】:当您在视图上设置 alpha 时,所有子视图都使用相同的 alpha 值进行合成。除了在视图本身上设置 alpha 之外,您可以做的是使用带有 alpha 值的色调或背景颜色。这可以产生类似的效果,而不会导致所有子视图都继承透明度。
toolbar.tintColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
如果这不起作用并且您实际上需要使视图本身透明,则必须重新设计视图层次结构,以使不透明的视图不是子视图。由于栏按钮项不能作为标准视图使用,因此它可能无法在工具栏的情况下使用。
【讨论】:
self.bottomToolbar.barStyle = UIBarStyleBlack; self.bottomToolbar.translucent = YES; self.bottomToolbar.backgroundColor = [UIColor clearColor];【参考方案2】:self.bottomToolbar.barStyle = UIBarStyleBlack;
self.bottomToolbar.translucent = YES;
self.bottomToolbar.backgroundColor = [UIColor clearColor];
查看不透明度设置为 1,这些设置为我做了。
【讨论】:
你也可以在InterfaceBuilder/Storyboard中设置(样式“半透明黑色”)【参考方案3】:以上方法在 ios 4.3 中对我不起作用,但确实如此:
子类UIToolbar,提供一种方法:
- (void)drawRect:(CGRect)rect
[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
【讨论】:
【参考方案4】:我发现 barStyle 实际上并不重要。也没有将背景颜色设置为清除。
self.toolbar.barStyle = UIBarStyleDefault;
self.toolbar.tintColor = [UIColor colorWithWhite:0.0 alpha:0.5];
self.toolbar.translucent = YES;
那些行为我完成了工作(ios4.3)。 据我所知,将工具栏的 transfluent 属性设置为 YES 您已将其设置为具有清晰(透明)背景。当然,这取决于您设置的色调颜色。如果它不包含 alpha 分量,则该条将是不透明的。
【讨论】:
【参考方案5】:控制工具栏的 alpha 值的主要问题是它适用于整个工具栏及其按钮。如果您设置一个backgroundColor
的某个alpha 值barStyle(UIBarStyleDefault 或UIBarStyleBlack)组合,从而产生比原始backgroundColor
更不透明的颜色。如果您设置barTintColor
,它似乎会覆盖所有其他设置,包括您设置的任何 alpha 值,从而导致颜色完全不透明。
我能够在不影响其按钮的情况下减少工具栏的 alpha 的唯一方法是通过 setting its background image via setBackgroundImage:forToolbarPosition:barMetrics:
。您可以使用所需的颜色和 alpha 创建一个 1px x 1px 的图像:
+ (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];
【讨论】:
【参考方案6】:经过数小时评估上述每种方法后,我发现只有 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
【讨论】:
以上是关于UIToolBar 具有降低的 alpha,希望 UIBarButtonItem 具有 alpha 1的主要内容,如果未能解决你的问题,请参考以下文章
如何用 UIToolbar 之类的色调绘制 UIButton
UINavigation 控制器 UIViewController 和 UItoolbar 作为子视图问题