スマート反転モード(Smart Invert)への対応について

iOS 11からスマート反転モードが搭載されました。アプリ側で対応させるには、反転させたくない写真や映像などのViewに対してaccessibilityIgnoresInvertColorsを設定すれば良いのですが、UISliderだけはデフォルトで反転しないようです。

UISliderの内部のsubviewに対してaccessibilityIgnoresInvertColors=NOを設定しても反転してくれません。取り合えず、つまみはそのままで、minimumとmaximumのtrackImage(or tintColor)を入れ替えると反転しても少しマシに見えます。暫定措置

// Subclass of UISlider
if (UIAccessibilityIsInvertColorsEnabled()) {
    UIImage *minImage = [self minimumTrackImageForState:UIControlStateNormal];
    UIImage *maxImage = [self maximumTrackImageForState:UIControlStateNormal];
    [self setMinimumTrackImage:maxImage forState:UIControlStateNormal];
    [self setMaximumTrackImage:minImage forState:UIControlStateNormal];
}

High volume warning

スライダーは様々な使い方ができますが、ボリューム用途に限っては、どうもヨーロッパでは音量を大きくした場合に右側を黄色点滅にして、聴覚への悪影響を警告しなければいけない決まりがあるそうです。黄色が指定されていて反転させられないようです。日本独自のカメラのシャッター音みたいなもんでしょうか。アップルのエンジニアは大変だわ。