1

このアプリを iOS 6 用にコンパイルしました。これは iOS 4.3 からアップグレードされたコードであり、そこでは正常に動作していました。

セグメント化されたコントロールを作成すると、そのアイコンはアルファ チャネルだけになり、コントロールは透明になります。

これが私がそれを作成する方法です

// images is a NSArray of images. I have confirmed. 
// All images are OK and are loading fine on this array. 
// Images have alpha channel. They are basically solid
// rounded icons with shadows surrounded by transparent pixels
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:images];
[segmentedControl addTarget:self action:selector(change:)
           forControlEvents:UIControlEventValueChanged];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;

これが私がコントロールを見る方法です。アルファ チャネルのアイコン シャドウに対応する、ぼやけた青い右の境界線に注目してください。また、もう1つの問題は、これが青色であることです。このコントロールの青色を調整したことはありません。これは、iOS 4.3 で問題なく動作していました。

手がかりはありますか?


編集: 画像をテキストに置き換えるとすぐに、セグメント化されたコントロールが正しくレンダリングされます: 不透明で青はありません。これでWTFレベルが上がりました。

いくつかのWTFファクターで青を示す3つの赤い画像を含むサンプルプロジェクトを作成しました。ここからプロジェクトをダウンロードしてください: http://www.fileswap.com/dl/RVf7UuwKhf/

ここに画像の説明を入力

4

1 に答える 1

4

iOS7 では、画像の新しいオプションが導入されました ( UIImageRenderingMode)。このオプションが行うことは、画像をテンプレートとして扱うかどうかを指定することです。

画像がテンプレートの「モード」にある場合、非透明部分が着色されます (のデフォルトの色tintは、アプリの色合いに一致するグローバルなものであり、コントロール全体に一貫したテーマを提供します)。

original解決策は、画像を次のtemplateように指定するだけです。

UIImage *a = [[UIImage imageNamed:@"ITEAM-icon157.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *b = [[UIImage imageNamed:@"ITEAM-icon159.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *c = [[UIImage imageNamed:@"ITEAM-icon160.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

もちろん、赤segmentedControlと赤のアイコンが必要な場合は、次tintColorのようにコントロールの を設定できます (上記のように画像のレンダリング モードを指定する必要はありません)。

segmentedControl.tintColor = [UIColor redColor];

最後に、 という 3 番目のオプションがあります。このオプションUIImageRenderingModeAutomaticでは、画像が使用されるコンテキストに基づいて、画像が自動的にテンプレート/法線として扱われます。Apple はコンテキストがどのように決定されるかを明らかにしていませんがtemplate、コントロールやs などnormalを選択することを期待しています。UIImageView

関連するドキュメントはこちらにあります。

于 2013-10-17T09:41:18.990 に答える