检查tintColor是否在tintColorDidChange中变暗

Aar*_*ger 4 cocoa-touch uiview ios

在iOS 7上,当色调颜色发生变化时(例如,当显示UIAlertView时),会在其tintColorDidChange方法中通知视图.

我有几个子视图,我想提供一个自定义的禁用状态.(例如,假设我还想暂时调暗自backgroundColor定义UIControl.)

我一直在使用这段代码:

- (void)tintColorDidChange {
    BOOL isInactive = (CGColorSpaceGetModel(CGColorGetColorSpace([self.tintColor CGColor])) == kCGColorSpaceModelMonochrome);
    if (isInactive) {
        // modify subviews to look disabled
    } else {
        // modify subviews to look enabled
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在我的某个应用程序中的某些视图中,活动色调颜色为深灰色,非活动色调颜色为浅灰色.

在这种情况下,两种颜色都报告为"不活动",因为两种颜色都是单色.

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

rma*_*ddy 9

看看UIView tintAdjustmentMode酒店.这样的东西(在你的自定义控件类中):

- (void)tintColorDidChange {
    BOOL isInactive = self.tintAdjustmentMode == UIViewTintAdjustmentModeDimmed;
    if (isInactive) {
        // modify subviews to look disabled
    } else {
        // modify subviews to look enabled
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,此代码只能在iOS 7.0或更高版本下运行.