0

カスタム ボタンがあります。これは標準の UIButton ですが、CAGradientLayer が追加されています。

カスタム ボタンでは、次の 2 つのプロパティを定義しました。

@property (nonatomic, strong) UIColor* topColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor* bottomColor UI_APPEARANCE_SELECTOR;

これら 2 つの値が設定されると、my ボタンは素敵な線形グラデーションで描画されます。よく働く。

また、InterfaceBuilder にできる限り多くのことを入れたいと思っています。したがって、これらのボタンのいくつかでは、IB の「Identity Inpsector」で、これらのプロパティの「ユーザー定義ランタイム属性」を追加します。繰り返しますが、うまくいきます。

次に、UIAppearance プロキシを使用してみようと思いました。私のカスタムグラデーションボタンのほとんどはすべて同じ色です. しかし、異なるものもいくつかあります。したがって、外観プロキシを使用してこのクラスのデフォルトの色を設定し、異なるボタンについては、InterfaceBuilder で値を設定するだけでよいと考えました。これは失敗します。

どうやら、最初にストーリーボード ファイルからランタイム属性を読み取っていますが、その後、これらの値は外観プロキシによって上書きされます。これがこのように機能するとは思いませんが、機能します。

これを達成するためのヒントはありますか?それとも、ランタイム属性のことをあきらめるべきですか?

4

1 に答える 1

0

わかりました、私はこれについて考えました。これが Appearance プロキシが実際に行うべきことだと思います。したがって、私の解決策は、「MySpecialButton」と「MyAppearanceButton」の 2 つのクラスを持つことです。

MyAppearanceButton は MySpecialButton のサブクラスになります。

「MyAppearanceButton」の外観は、外観プロキシ呼び出しによって制御されます。そのように制御されないボタンが必要な場合は、"MySpecialButton" を作成し、ユーザー定義のランタイム属性でプロパティを設定します。それはそれを行う必要があります。

于 2013-08-07T17:31:54.367 に答える