5

iOS 5 アプリでテーマをサポートするためのクラスをいくつか作成しています。私のテーマは plist に保存され、さまざまなコントロールを初期化するためにアプリで使用する Theme オブジェクトにロードします。色を文字列としてテーマに保存し、次のコードを使用してそれらを UIColor に変換します。

UIColor* color = [UIColor colorWithCIColor:[CIColor colorWithString:@"0.5 0.5 0.5 1.0"]];

これはほとんどのコントロールで正常に機能しますが、ナビゲーション バーの色合いを次のように設定しようとすると、次のようになります。

//navigation bar
[self.navigationController.navigationBar setTintColor:color];

私はこの例外を受け取ります:

-[UICIColor colorSpaceName]: unrecognized selector sent to instance

CIColor を使用せずに色を初期化すると、たとえば次のようになります。

UIColor* color = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];
[self.navigationController.navigationBar setTintColor:color];

すべてうまくいきます。

これを引き起こしている手がかりはありますか?UICIColor に関する情報はあまり見つかりませんでしたが、UIColor は CGColor または CIColor のラッパーにすぎないため、実装に違いがあると推測しています。

4

3 に答える 3

3

uibuttonのtitleLabelプロパティ(xcode4.5およびIOSsdk 6.0)にアクセスしようとすると奇妙なクラッシュが発生するを参照してください。

回避策を見つけました:colorWithCIColorを使用する前に、次のコマンドでコピーを作成しました:

newcolor = [UIColor colorWithCGColor:newcolor.CGColor];

そしてそれはクラッシュを解決します。とにかく奇妙な

于 2013-01-27T11:30:14.773 に答える
1

私は同様の問題を抱えていました

[UIColor colorWithCIColor:[CIColor colorWithString:color]]; 

これに対する洗練された修正を探しましたが、最終的には、問題を停止し、アプリを以前とまったく同じように続行できるソリューションに落ち着きました.

私の色の文字列はあなたのものと同じ形式でした:

"0.5 0.7 0.2 0.75"

それを修正する最も簡単な方法は、次のことを行うことであることがわかりました。

NSArray * colorParts = [color componentsSeparatedByString: @" "];

CGFloat red = [[colorParts objectAtIndex:0] floatValue];
CGFloat green = [[colorParts objectAtIndex:1] floatValue];
CGFloat blue = [[colorParts objectAtIndex:2] floatValue];
CGFloat alpha = [[colorParts objectAtIndex:3] floatValue];

UIColor * newColor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];

各値を手動で分割してから、 colorWithRed: コードに入れます。

これは、カラー文字列を保持しながら、すべてのクラッシュの原因となっている問題のある colorWithString コードを取り除くことができることを意味します。

お役に立てれば

于 2014-11-03T23:01:45.247 に答える
-1

UIColorで定義します。に変換するためiOS 2.0、アップルの変換エラーだと思います。以下のコードを使用できます。[UIColor colorWithCIColor]iOS5.0

    CIColor *ci_ = [CIColor colorWithString:colorString];
    UIColor *color = [UIColor colorWithRed:ci_.red green:ci_.green blue:ci_.blue alpha:ci_.alpha];
    // UIColor *color = [UIColor colorWithCIColor:[CIColor colorWithString:colorString]];
于 2013-01-17T11:13:19.647 に答える