2012-03-23 11 views
4

タップすると要素が灰色になるジェネリッククラスを作りたいと思います。UIButtonの灰色のオーバーレイをプログラムでタッチした状態で作成する方法はありますか?

Facebookのアプリは、私が達成したいと思うものの完璧な例です。タップすると、すべてのリンクと画像が灰色になります。

enter image description here

私は、彼らがUIButtonをサブクラス化していることを推測することができます。

ボタンのスタイルをUIButtonTypeCustomにして、丸い枠線を削除しました。それ以外では、ドキュメントにそのようなプロパティがないので、グレーのオーバーレイをどのように持つかわかりません。

+1

私はWebViewを使用していると確信しています。このWebViewは、そのグレーネスとのリンクを強調しています。 – Brian

+0

このWebViewハイライトを自分のネイティブコードでシミュレートする必要があります。 – JoJo

+0

@JoJo:私の答えを参照してください。私は自分の答えを編集しました。それがあなたを助けると思う。 –

答えて

2

そのシンプル:

#define TAG_GRAYVIEW 5671263 // some random number 

// add the gray overlay 
UIView *grayView = [[UIView alloc] initWithFrame:button.bounds]; 
grayView.backgroundColor = [UIColor grayColor]; 
grayView.tag = TAG_GRAYVIEW; 

[button addSubview:grayView]; 

// remove the gray overlay 
UIView *grayView = [button viewWithTag:TAG_GRAYVIEW]; 
[grayView removeFromSuperview]; 
+0

'UIResponder'の' touchesBegan:withEvent: 'を使ってオーバーレイを追加し、' touchesEnded:withEvent: 'を使ってオーバーレイを削除しますか? – JoJo

+0

@JoJoそれはメインスレッドで呼び出すので、うまく動作するはずです。 –

+0

これはとてもシンプルでとてもうまくいきます!私はUIImageViewで美しく使っただけです! –

0

このようなボタンを設定してみてください。 *この例ではイメージを作成していないことに気をつけてください。

ボタンの種類をカスタムに設定し、「状態の構成」で「ハイライト」を選択すると、ボタンの画像を半透明の灰色の画像に設定します。この同じ効果を達成するには他にもいくつかの方法がありますが、これはすばらしく簡単です。

enter image description here

+0

私はInterface Builderを使用しません。私のビューはコードで動的に生成されます。 – JoJo

0

デフォルトUIButtonマスク、灰色のハイライトを使用して、不透明なコンテンツ。たとえば、透明なPNGを使用している場合、不透明なピクセルを含む部分だけがタッチされてグレー表示されます。デフォルトのUIButtonのハイライトは、サブビュー/サブレイヤには影響を与えず、提供された画像に対してのみ機能します。 Facebookのアプリで見られるのはたぶんUIWebViewのハイライトで、おそらくcssを使ってカスタマイズされています。独自のコントロールを使用して、同様のものを作成するには

UIWebViewのオーバーヘッドを防止するために)あなたは、おそらくあなた自身のUIControlサブクラスを作成し、透明CALayerを使用してタッチ上のコンテンツを強調すべきです。 CALayerをマスクして、矩形の代わりに実際の内容のみを強調表示することもできます。

また、creating custom controls for iOS by subclassing UIControlの私のstackoverflowポストを参照してください。

2

私はあなたが半トランスペアレントグレーの画像PNGファイルを使用する必要があると思います。ボタンの画像をHighlightedの状態に設定する必要があります。

Normal州とHighlighted州の両方の画像にはタイトルが付いた画像が必要です。

ボタンに画像を設定すると、btn.titleLabel.textは表示されません。

このように、背景に透明な背景とタイトルを持つイメージを持つことができます。Normalです。そしてグレーの画像にタイトルがありますHighlightedの状態です。プログラムでそれを行うための

コードは、これはあなたを助け

[btn setImage:@"Transperant.png" forState:UIControlStateNormal]; 
[btn setImage:@"Grey.png" forState:UIControlStateHighlighted]; 

希望です。

+0

@JoJo:私の答えを参照してください。私はそれが最も簡単な解決策だと思う –

関連する問題