iOS的“模板图标”无法涵盖所有必需的图标,因此我需要在导航栏中添加一个自定义图标(“···”更多图标)。
现在有没有一种方法可以给iOS一个monochome的,可扩展的图标文件,我可以以一种可维护的方式对其进行着色(例如,与文本颜色相同),而无需为其生成位图?
当您希望将它们用作任务栏图标时,OS X会使用PDF,以便OS X可以根据亮/暗颜色主题更改图标的颜色。
你可以用
navigationItem.rightBarButtonItem?.tintColor = UIColor.redColor()
如果您想tintColor
全部navigationItems
使用,可以使用
let sharedApplication = UIApplication.sharedApplication()
sharedApplication.delegate?.window??.tintColor = UIColor.redColor()
这是可能的,因为从iOS 7
,UIImage
有一个renderingMode
属性。
使用指定的渲染模式创建此图像的版本。默认情况下,图像的渲染模式为UIImageRenderingModeAutomatic。
@available(iOS 7.0, *)
public func imageWithRenderingMode(renderingMode: UIImageRenderingMode) -> UIImage
@available(iOS 7.0, *)
public var renderingMode: UIImageRenderingMode { get }
关于renderingMode
:
图像默认情况下使用UIImageRenderingModeAutomatic创建。具有此模式的图像根据其渲染的上下文被解释为模板图像或原始图像。例如,导航栏,选项卡栏,工具栏和分段控件自动将其前景图像视为模板,而图像视图和Web视图将其图像视为原始图像。您可以使用UIImageRenderingModeAlwaysTemplate强制将图像始终呈现为模板,也可以使用UIImageRenderingModeAlwaysOriginal强制将图像始终呈现为原始图像。
@available(iOS 7.0, *)
public enum UIImageRenderingMode : Int {
case Automatic // Use the default rendering mode for the context where the image is used
case AlwaysOriginal // Always draw the original image, without treating it as a template
case AlwaysTemplate // Always draw the image as a template image, ignoring its color information
}
我们不需要更改navigationItem图像的呈现模式,因为导航栏控件会自动将其前景图像视为模板。
如果需要,可以使用imageWithRenderingMode()
方法更改任何UIImage的呈现模式以具有此功能,例如
UIImage(named: "settings")?.imageWithRenderingMode(.AlwaysTemplate)
对于缩放,你可以参考resizableImageWithCapInsets()
的方法UIImage
有关更多信息,请参见Essan Parto的 Ray Wenderlich教程
UIAppearance教程:入门
更新:
见上图。它只有10x10像素。
该图像可能很小,但是iOS确切知道如何使用它进行绘制,因为它已经被预先切片并且可以调整大小。
例子
let controlBackground = UIImage(named: "controlBackground")?
.imageWithRenderingMode(.AlwaysTemplate)
.resizableImageWithCapInsets(UIEdgeInsets(top: 3, left: 3, bottom: 3, right: 3))
上,左,下,右角均未触及,图像的中间部分将被添加淀粉。有了这个小图像,您可以制作一个大矩形以保持图像角完整。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句