检查tintColor是否在tintColorDidChange中变暗

时间:2014-01-29 21:37:25

标签: ios cocoa-touch uiview

在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
    }
}

但是,在我的某个应用中的某些视图中,活动色调颜色为深灰色,无效色调颜色为浅灰色。

在这种情况下,两种颜色都报告为“不活动”,因为两种颜色都是单色的。

是否有更好的测试来确定当前状态是激活还是变暗?

1 个答案:

答案 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或更高版本下运行。