Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if tintColor is dimmed in tintColorDidChange

On iOS 7, when the tint color changes (for example, when a UIAlertView is presented), views are notified in their tintColorDidChange method.

I have a few subviews for which I'd like to provide a customized disabled state. (For example, say I'd like to also temporarily dim the backgroundColor of a custom UIControl.)

I had been using this code:

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

However, on some views in one of my apps, the active tint color is a very dark gray, and the inactive tint color is a lighter gray.

In this case, both colors report as "inactive" because both colors are monochrome.

Is there a better test to determine if the current state is active or dimmed?

like image 861
Aaron Brager Avatar asked Jan 29 '14 21:01

Aaron Brager


1 Answers

Have a look at the UIView tintAdjustmentMode property. Something like this (in your custom control class):

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

Of course this code must only be run under iOS 7.0 or later.

like image 136
rmaddy Avatar answered Nov 20 '22 17:11

rmaddy