在iOS 7上,当色调颜色发生变化时(例如,当呈现UIAlertView时),视图会以tintColorDidChange
方式通知。
我有几个子视图,我想提供一个自定义的禁用状态。 (例如,假设我还想暂时调暗自定义UIControl的backgroundColor
。)
我一直在使用这段代码:
- (void)tintColorDidChange {
BOOL isInactive = (CGColorSpaceGetModel(CGColorGetColorSpace([self.tintColor CGColor])) == kCGColorSpaceModelMonochrome);
if (isInactive) {
// modify subviews to look disabled
} else {
// modify subviews to look enabled
}
}
但是,在我的某个应用中的某些视图中,活动色调颜色为深灰色,无效色调颜色为浅灰色。
在这种情况下,两种颜色都报告为“不活动”,因为两种颜色都是单色的。
是否有更好的测试来确定当前状态是激活还是变暗?
答案 0 :(得分:9)
查看UIView tintAdjustmentMode
属性。这样的东西(在你的自定义控件类中):
- (void)tintColorDidChange {
BOOL isInactive = self.tintAdjustmentMode == UIViewTintAdjustmentModeDimmed;
if (isInactive) {
// modify subviews to look disabled
} else {
// modify subviews to look enabled
}
}
当然,此代码只能在iOS 7.0或更高版本下运行。