私はiPhoneUIにカスタムボタンを追加している最中であり、Appleのアプリからガラスのように見えるようにしたいと考えています。私は良いデフォルトのガラス画像を持っていますが、私が望む色合い(赤、緑、青など)ごとに別々の画像を持たなければならないのは嫌です。
グレースケールPNGをロードして、希望の色に調整する方法はありますか?さらに良いことに、カスタム画像をまったくロードせずにAppleのガラスのような外観を得る方法はありますか?
私はiPhoneUIにカスタムボタンを追加している最中であり、Appleのアプリからガラスのように見えるようにしたいと考えています。私は良いデフォルトのガラス画像を持っていますが、私が望む色合い(赤、緑、青など)ごとに別々の画像を持たなければならないのは嫌です。
グレースケールPNGをロードして、希望の色に調整する方法はありますか?さらに良いことに、カスタム画像をまったくロードせずにAppleのガラスのような外観を得る方法はありますか?
少し遅れましたが、私のような誰かがこの種の情報を検索する場合に備えて:UISegmentedControl
単一のボタンで a を使用し、それを としてmomentary
設定し、その を に設定しtintColor
ます。このように、色と同じ数の PNG を準備する必要はなく、フレームワークがすべてのレンダリングを処理します。
例:
UISegmentedControl *cancelButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Cancel"]];
[cancelButton setSegmentedControlStyle:UISegmentedControlStyleBar];
[cancelButton setTintColor:[UIColor colorWithRed:0.8 green:0.3 blue:0.3 alpha:1.0]];
[cancelButton setMomentary:YES];
[cancelButton addTarget:self action:@selector(didTapCancel:) forControlEvents:UIControlEventValueChanged];
[self addSubview:cancelButton];
[cancelButton release];
常に優れた「Cocoa With Love」サイトにサンプルがあります: CoreGraphic で光沢グラデーションを描画する
私が知っているワンライナーの方法はありませんが、デフォルトのグレースケール画像を単色で合成する(つまり、上に描画する)ことで、目的の効果を得ることができる場合があります。Core Graphics のドキュメントに目を通してみると、十数種類の異なる合成方法 (たとえば、カラー バーン) があり、それらのいくつかの組み合わせによって、必要な効果が得られることがわかります。
iPhone UI についてはわかりませんが、単一の PNG を使用してカラー バリアント グラフィックスを作成できます。
つまり、これらのページの両方のロゴ (左上):
このPNGを使用
代替テキスト http://47degrees.com/images/logos/47_degrees.png
ガラスのようにするには、背景色を色合いとして設定する必要があると思います。
連絡先編集ビューの [連絡先の削除] ボタンで使用されるレンダリングとほぼ一致する独自のカスタム ボタンを作成することになりました。
興味のある方は、次の github で見つけることができます。
私はこれを行いましたが、かなりうまく機能します:
iOS: RGB フィルターをグレースケール PNG に適用する
ただし、それはごまかしです。追加しているため、(たとえば)各ピクセルの赤成分については、 R_dest = R_src + R_tint
たとえば、きめ細かな制御が必要な場合は、RGB コンポーネントを平均して (適切な重み付けを使用して) 各ピクセルのグレースケール値を抽出し、この値に色合いを掛けると、結果の色はグレースケール (Sr) になります。 ,Sg,Sb) * {Tr,Tg,Tb}
これには、メモリのチャンクを作成し、このチャンクに描画するビットマップ コンテキストを作成し、このコンテキストにイメージを描画し、保管のためにメモリ チャンク全体をコピーし、処理する必要があります。コピーからデータを取得し、元のバッキング ストアを変更します。元のバッキング ストアからイメージを抽出し、割り当てたすべてのものを解放します。
RGBAピクセルバイトデータからUIImageを再構成する際の問題
このライブラリはすべてを行ってくれます。これは最も効率的なルートではありませんが、仕事は完了します。彼は calloc を使用すべきときに malloc を使用しています。