0

UITextView で使用される色を取得しようとしています。

そのために私が書いたのは、

myTextView.textColor

しかし、これにより次のような出力が得られます

UIDeviceRGBColorSpace 0.439216 0.439216 0.439216 1

実際のRGBの組み合わせを取得する方法はありますか?


そうですか...

これに 255 を掛ける必要があります :D :P

0.439216*255 が 112 の場合、色の比較で目的の結果が得られないのはなぜですか?

UITextView に適用した色は、定数を使用して以下のとおりです。

#define placeColor [UIColor colorWithRed:112/255.0 green:112/255.0 blue:112/255.0 alpha:1.0]

私が比較しているとき

if (aboutCompany.textColor == placeColor) {
    NSLog(@"place color..");
    aboutCompany.text = @"";
    aboutCompany.textColor = fottColor;
} else {
    NSLog(@"not place color..");
}

場所の色ではなく、取得しています...

理由は何ですか?

4

1 に答える 1

0

2 つの NSObject (またはこの場合は NSObject サブクラス) を比較する場合、== 演算子を使用したくありません。== 演算子は、2 つのオブジェクトが同じ値を持っているかどうかはわかりません。同じオブジェクトを比較しているかどうかだけがわかります。「compare」または「isEqual」メソッドを使用する必要があります。(Compare は、実際には <、=、および > にそれぞれ対応する 3 つの状態のいずれかを示す列挙型を返すため、追加のオーバーヘッドがあります。)

「ボンネットの下で」何が起こっているかというと、objective-C では、NSObject を直接宣言することは決してなく、ポインタを宣言するだけで、オブジェクトが埋めるアドレス空間で埋められます。

{
    NSObject *foo=[[Foo alloc] init];
    NSObject *bar=foo;

    foo==bar;//true
    //If you inspect foo and bar really closely in the debugger, you'll discover they're both just integers pointing to a 'random' memory space.
}

{
    NSNumber *alpha=@(1);
    NSNumber *beta=@(1);
    //Again, if you inspect these very closely, you'll discover they're pointers to memory space, but this time you're pointing to two different spaces in memory, even though you're storing the same data in them.
    alpha==beta;//False, they're two separate objects
    [alpha isEqualTo:beta];//true; their value is identical
    [alpha intValue]==[beta intValue;//Again, true because their value is identical
}

また、浮動小数点値を操作するときは、等値演算子の結果を信頼することに細心の注意を払います。UIColor は float に基づいて構築されています。浮動小数点数には、「あるべき」場合でも、等しくないという厄介な習慣があります。これは、数値の基礎となるマシン表現に関係しており、数値にある程度の「ノイズ」が含まれる可能性があります。ほとんどの場合、そのノイズは比較的重要ではありません (たとえば、+/- 1*10^-10) が、等値演算を実行する場合は非常に厄介です。これについて詳しく説明しているオンラインの記事はたくさんあります。自由に調べてみてください。ただし、等号を計算する代わりに、2 つの数値の差が特定のイプシロンよりも小さいこと、つまり差が 10 未満であることを確認する必要があります。たとえば、^-5。適切なイプシロンを導き出す正確な方法は、私がお手伝いできないことです。独自の調査を行う必要があります。できればフロートを使用しないことで頭痛を回避し、フロートに等値演算子を必要とすることは決して行いません。

于 2013-10-02T14:31:00.817 に答える