「ストック」アクアのラジオボタンとチェックボックスの画像が通常のNSButtonCell
方法で描画されていることに気付きました-drawImage:withFrame:inView:
.
サブクラスで描画するとき、NSButtonCell
渡されたストック画像と開発者から提供された画像を区別したいと思います。カスタム画像ならそれを使って欲しいけど、デフォルトのインターフェース画像なら自分で作画したい。それは理にかなっていますか?
とにかく、画像がデフォルトのインターフェース画像であるかどうかをチェックするメソッドを書きました。これは次のようになります。
- (BOOL)isAquaInterfaceImage:(NSImage *)image
{
return [image.representations[0] isKindOfClass:NSClassFromString(@"NSCoreUIImageRep")];
}
Apple 提供のイメージはプライベート クラスを使用しているため、このNSClassFromString()
関数を使用して実行時に出力するようにし、コンパイラの警告が大量に表示されないようにしています。この手法はうまく機能し、描画メソッドに渡された画像を描画する必要があるかどうかを確認できます。問題は、プライベート クラスを参照しているという理由だけで、開発者のアプリが Mac App Store に受け入れられないようにしたくないということです。
私はこれらすべてに慣れていないので、Apple の規則がどれほど「厳格」であるか正確にはわかりません。プライベート クラスまたはフレームワークの名前を使用することに関して、Apple がどこに線を引いているか知っている人がいれば、ぜひ知りたいです。ありがとう!