透明的 UIImage 在 navBar 中不透明
Transparent UIImage is not tranrperent in navBar
我创建了一个白色图像,其 alpha 为 0.2。但是,当我添加它时,它在导航栏中似乎并不透明。它是完全白色的。我对 tabBar 做了同样的事情,效果很好。我究竟做错了什么。这是在 viewControllers ViewDidLoad:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "Navbar"), forBarMetrics: UIBarMetrics.Default)
当不使用 UIImageView 时,控制 UIImage 的 alpha 值的一种万无一失的方法是为图像指定初始 alpha 值 1,然后添加此 UIImage 扩展名:
extension UIImage{
func alpha(value:CGFloat)->UIImage
{
UIGraphicsBeginImageContextWithOptions(self.size, false, 0.0)
let ctx = UIGraphicsGetCurrentContext();
let area = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -area.size.height);
CGContextSetAlpha(ctx, value);
CGContextDrawImage(ctx, area, self.CGImage);
let newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
}
...然后在 ViewDidLoad 中:
let newNavBar = UIImage(named: "navBar")!.alpha(0.2)
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "newNavBar"), forBarMetrics: UIBarMetrics.Default)
我创建了一个白色图像,其 alpha 为 0.2。但是,当我添加它时,它在导航栏中似乎并不透明。它是完全白色的。我对 tabBar 做了同样的事情,效果很好。我究竟做错了什么。这是在 viewControllers ViewDidLoad:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "Navbar"), forBarMetrics: UIBarMetrics.Default)
当不使用 UIImageView 时,控制 UIImage 的 alpha 值的一种万无一失的方法是为图像指定初始 alpha 值 1,然后添加此 UIImage 扩展名:
extension UIImage{
func alpha(value:CGFloat)->UIImage
{
UIGraphicsBeginImageContextWithOptions(self.size, false, 0.0)
let ctx = UIGraphicsGetCurrentContext();
let area = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -area.size.height);
CGContextSetAlpha(ctx, value);
CGContextDrawImage(ctx, area, self.CGImage);
let newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
}
...然后在 ViewDidLoad 中:
let newNavBar = UIImage(named: "navBar")!.alpha(0.2)
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "newNavBar"), forBarMetrics: UIBarMetrics.Default)