jarinosuke blog

about software engineering, mostly about iOS

UIViewTintAdjustmentMode について

tintColor

iOS 4 以前は tintColor プロパティは UIToolBar など、限られたクラスにのみ提供されていました。

UIToolBar - tintColor | iOS Developer Library

iOS 5 になると UIAppearance が提供され、他にもたくさんの UIView のサブクラスが tintColor プロパティを持つようになりました。

iOS 7 では遂に UIView 自身が tintColor プロパティを持つようになり、アプリケーション全体への tintColor の反映が可能なりました。

どういうことかというと、値を明示的に指定しない限り tintColor プロパティは親ビューの値を受け継ぐので、

たとえば keyWindow の tintColor プロパティを設定するだけでアプリ全体に行き渡る、ということです。

UIViewTintAdjustmentMode

iOS 7 からは tintColor 同様、UIView に tintAdjustmentMode というプロパティが追加されました。

このプロパティは上記の tintColor の継承関係をどのように反映させるかを決定するものです。

subviews の中に tintColor プロパティがデフォルトのものしか無ければ値は UIViewTintAdjustmentModeNormal になります。

UIViewTintAdjustmentModeDimmed を明示的に tintAdjustmentMode に設定すると、

その UIView の tintColor からは dimmed 加工が施された UIColor が return されるようになります。

ユースケース

f:id:jarinosuke0808:20140406193757p:plain

そもそもこのプロパティを見つけるに至ったきっかけになるのですが、

UIAlertView のようなモーダルで覆うカスタムビューを作る場合などに使用します。

以下のコードが非常に勉強になりました。

TeehanLax/TLAlertView

ちなみに UIAlertView を show したときに後ろ側に回る keyWindow を見るとわかりますが、

UIAlertView はしっかり keyWindow の tintAdjustmentMode を dimmed に設定しています。

なので UIKit の作法に従うためにも、細かいですがしっかりと実装していきたいところですね。

参考

UIView - tintAdjustmentMode | iOS Developer Library

[iOS 7] UIViewにtintColorが追加されました!| Developer.IO

Adopting iOS 7 APIs

TeehanLax/TLAlertView

UIAppearance | NSHipster