我正在我的应用程序中创建自定义元素,并希望匹配新 iOS 的外观和感觉。 iOS 7 向我们介绍了一种非常常见的浅蓝色,这是几个元素的默认颜色或色调,包括系统按钮、分段控件等。它们使使用 IB 选择颜色变得容易,如下所示:
https://i.stack.imgur.com/deFsk.png
但是,我还没有找到如何以编程方式轻松访问颜色。我检查了 UIColor documentation,并且类本身似乎没有任何蓝色系统颜色的访问器。
这是我的问题:这种颜色是否存在简单的访问器? [UIColor ?]
或类似的东西?如果没有,是否有人知道该颜色的确切 RGB 值?
使用来自视图控制器的 self.view.tintColor
,或来自 UIView
子类的 self.tintColor
。
它似乎是 [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0]
。
https://i.stack.imgur.com/nb08q.png
UIColor(red: 0.0, green: 122.0/255.0, blue: 1.0, alpha: 1.0)
iOS 7 默认蓝色为 R:0.0 G:122.0 B:255.0
UIColor *ios7BlueColor = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];
0x007aff
根据 UIButton 的文档:
在 iOS v7.0 中,UIView 的所有子类都从基类中派生出它们的 tintColor 行为。有关更多信息,请参阅 UIView 级别的 tintColor 讨论。
假设您在获取默认值之前不更改 tintColor,您可以使用:
self.view.tintColor
sharedApplication()
没有 keyWindow
和 tintColor
这是获取默认系统色调颜色的简单方法:
+ (UIColor*)defaultSystemTintColor
{
static UIColor* systemTintColor = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
UIView* view = [[UIView alloc] init];
systemTintColor = view.tintColor;
});
return systemTintColor;
}
dispatch_once
的开销非常低,并且在常见情况下是单个 if 检查。
UIColor
是安全的。将其包装在 dispatch_once
中允许在任何线程上安全地检索此颜色。同样,开销非常低。
快速4路:
extension UIColor {
static let system = UIView().tintColor!
}
具有预定义系统颜色的本机扩展提供了您正在寻找的内容:
// System colors
extension UIColor {
/* Some colors that are used by system elements and applications.
* These return named colors whose values may vary between different contexts and releases.
* Do not make assumptions about the color spaces or actual colors used.
*/
...
@available(iOS 7.0, *)
open class var systemBlue: UIColor { get }
...
}
您可以直接使用它:
myView.tintColor = .systemBlue
static let system = UIView().tintColor!
仍然比您的变体好得多。
使用以下代码自动获取颜色:
static let DefaultButtonColor = UIButton(type: UIButtonType.System).titleColorForState(.Normal)!
UIWindow.tintColor
方法在 iOS8 中对我不起作用(它仍然是黑色的),所以我必须这样做:
let b = UIButton.buttonWithType(UIButtonType.System) as UIButton
var color = b.titleColorForState(.Normal)
这给出了在 UIBarButtonItem
中看到的正确蓝色调
从 iOS 7 开始,有一个 API,您可以通过以下方式获取(和设置)色调:
self.view.tintColor
或者,如果您需要 CGColor:
self.view.tintColor.CGColor
在许多情况下,您需要的只是
[self tintColor]
// or if in a ViewController
[self.view tintColor]
或迅速
self.tintColor
// or if in a ViewController
self.view.tintColor
请不要乱用 view.tintColor
或扩展名,只需使用这个:
UIColor.systemBlue
在设置颜色时,您可以像这样设置颜色
[UIColor colorWithRed:19/255.0 green:144/255.0 blue:255/255.0 alpha:1.0]
rgb
值写入 /255.0
?
通过以下方式将类别添加到 UIColor 将使其在您需要时可供您使用,甚至可以在您的代码中更改其定义:
@interface UIColor (iOS7Colors)
+ (instancetype)iOS7blueColor;
@end
@implementation UIColor (SpecialColors)
+ (instancetype)iOS7blueColor;
{
return [UIColor colorWithRed:0.0f green:0.22f blue:122.0/255.0 alpha:1.0f];
}
在代码中导入类别后,您可以使用以下方法调用颜色:
UIColor *myBlueColor = [UIColor iOSblueColor];
+ (instancetype)iOS7redColor;
中从 blue
到 red
UIView().tintColor
,但实际上你不能。不确定 UIView 在什么时候设置了 tint color ......UIWindow
或者它的根视图具有原始版本。视图从响应者链中的更高视图继承其色调颜色,但在您的示例中,新视图没有超级视图。UIViewController.viewDidLoad()
中的self.view.tintColor
给出正确的蓝色。