【发布时间】:2017-05-03 09:21:43
【问题描述】:
所以我试图在我的项目中为 tabBarItems 设置自定义图标(因为默认选项非常有限)。
显然图标不会自动调整为 30 x 30,因为它们需要如此,所以我一直在尝试使用 UIImage 扩展手动进行。我只使用过一次或两次扩展,而我真正想做的就是将this answer 转换为 Swift 3。我对扩展的尝试如下:
extension UIImage {
func scaledToSize(size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
images?[0].draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
}
如果不清楚,这个扩展应该是这样使用来达到我的目的的:
self.tabBarItem.image = tabBarItemImage?.scaledToSize(size: CGSize(width: 30, height: 30))
我知道这不是最优雅的解决方案,但我认为它会起作用,但事实并非如此。我已经尝试将它与一个简单的 imageView 一起使用,但它也不能与它一起使用,所以我认为将这种技术与 tabBarItems 一起使用不是问题。
如果有人能指出我做错了什么或指导我朝着正确的方向前进,我将不胜感激。
【问题讨论】:
-
老实、愚蠢的问题 - 你设置了正确的 contentMode,对吗?如果是这样,那么唯一引起我注意的是 **images?[0].draw"。不确定您是否应该在“单个” UIImage 扩展中这样做。
-
@dfd 你指的是什么 contentMode?另外,您能否详细说明您的第二条评论?我一次只对一张照片应用更改,所以我认为只使用数组中的第一张图像应该是安全的。
-
UIImage.contentMode == 各种使图像属性“适合”您想要的方式。这几乎是您使用 UIImageView 所做的基本操作。 (我希望你说得对,只是确保。)我的第二条评论是指你如何编写扩展。如果您正在为 UIImage 扩展编码,它几乎就像子类化 - 您不能引用 **image[0]",因为 UIImageView 的 image 属性是单数的。(我可能期望在 UITabBarView 或其他东西中。)
-
我没有更改图片内容模式,需要吗?另外,我想我理解您对扩展部分的看法,但问题是,在 UIImage 扩展中,它具有属性“图像”但没有“图像”。这就是为什么我必须使用第一个索引符号来使它成为单数以便我可以改变它。我对 UIImageView 部分也有点不确定,因为我只是在更改 tabBarItem 的图像属性,所以我不需要 UIImageView。抱歉,如果我完全误解了您的信息,并感谢您迄今为止的见解!
标签: swift uiimage extension-methods