从取消选择的选项卡中删除掩码 UITabBarItem Swift
Remove mask from deselected tabs UITabBarItem Swift
我正在尝试用 2 UITabBarItems
实现 UITabBarController
。我在故事板中添加了 TabBarController。我几乎做到了,但我仍然被两个重要问题所困扰:
1) 标签栏应该是这样的:
请忽略橙色按钮,它不是 tabItem。
所以我放了 2 个 tabItems ,即使选择了其中一个,我也想为两个选项卡保留白色图像。
我用tintColor
、barTintColor
检查了很多次都没有成功。
我还尝试在 ViewController 中设置 tabBarItem:
override func awakeFromNib() {
super.awakeFromNib()
let imgHome = UIImage(named: "btnHome")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
let imgProfile = UIImage(named: "btnProfile")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
let imgSelectedTab = UIImage(named: "selectedTab_imgBackground")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
tabBarItem = UITabBarItem(title: nil, image: imgProfile, selectedImage: imgSelectedTab)
}
但没有成功。对这个问题有什么想法吗?
2) 第二期是关于 selectedImage
属性 of UITabBarItem
class。
图片 width
不适合标签。我在设备之间进行了更改,并且对于每个设备,所选图像都在另一个选项卡上,或者不适合当前选项卡。(我找到了一个解决方案:每个设备都有相同的图像但宽度不同。但可以肯定的是不是一个好的解决方案)
任何形式的帮助都可以!
非常感谢
您需要将渲染模式更改为 UIImageRenderingModeAlwaysOriginal
而不是自动。
这是我如何处理这两个问题的完整示例:
https://github.com/AndreiBoariu/TabBarController
对于第一期,我在UITabBarController
class:
中使用这个for
循环解决了
for item in tabBar.items as! [UITabBarItem] {
if let image = item.image {
item.image = image.imageWithColor(UIColor.whiteColor()).imageWithRenderingMode(.AlwaysOriginal)
}
}
这里是 UIImage
的扩展
public extension UIImage {
func imageWithColor(tintColor: UIColor) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let context = UIGraphicsGetCurrentContext() as CGContextRef
CGContextTranslateCTM(context, 0, self.size.height)
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetBlendMode(context, kCGBlendModeNormal)
let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
CGContextClipToMask(context, rect, self.CGImage)
tintColor.setFill()
CGContextFillRect(context, rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
UIGraphicsEndImageContext()
return newImage
}
}
第二期,检查代码来自github ;)
我正在尝试用 2 UITabBarItems
实现 UITabBarController
。我在故事板中添加了 TabBarController。我几乎做到了,但我仍然被两个重要问题所困扰:
1) 标签栏应该是这样的:
请忽略橙色按钮,它不是 tabItem。
所以我放了 2 个 tabItems ,即使选择了其中一个,我也想为两个选项卡保留白色图像。
我用tintColor
、barTintColor
检查了很多次都没有成功。
我还尝试在 ViewController 中设置 tabBarItem:
override func awakeFromNib() {
super.awakeFromNib()
let imgHome = UIImage(named: "btnHome")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
let imgProfile = UIImage(named: "btnProfile")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
let imgSelectedTab = UIImage(named: "selectedTab_imgBackground")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
tabBarItem = UITabBarItem(title: nil, image: imgProfile, selectedImage: imgSelectedTab)
}
但没有成功。对这个问题有什么想法吗?
2) 第二期是关于 selectedImage
属性 of UITabBarItem
class。
图片 width
不适合标签。我在设备之间进行了更改,并且对于每个设备,所选图像都在另一个选项卡上,或者不适合当前选项卡。(我找到了一个解决方案:每个设备都有相同的图像但宽度不同。但可以肯定的是不是一个好的解决方案)
任何形式的帮助都可以! 非常感谢
您需要将渲染模式更改为 UIImageRenderingModeAlwaysOriginal
而不是自动。
这是我如何处理这两个问题的完整示例: https://github.com/AndreiBoariu/TabBarController
对于第一期,我在UITabBarController
class:
for
循环解决了
for item in tabBar.items as! [UITabBarItem] {
if let image = item.image {
item.image = image.imageWithColor(UIColor.whiteColor()).imageWithRenderingMode(.AlwaysOriginal)
}
}
这里是 UIImage
public extension UIImage {
func imageWithColor(tintColor: UIColor) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let context = UIGraphicsGetCurrentContext() as CGContextRef
CGContextTranslateCTM(context, 0, self.size.height)
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetBlendMode(context, kCGBlendModeNormal)
let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
CGContextClipToMask(context, rect, self.CGImage)
tintColor.setFill()
CGContextFillRect(context, rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
UIGraphicsEndImageContext()
return newImage
}
}
第二期,检查代码来自github ;)