2

CALayers の 1 つに線形グラデーションをいくつかの色で描画していますが、同じ入力でランダムに色が画面にピンク色として描画されます。

コードは次のとおりです。

bottomComponents = bottomColor.colorComponents;
topComponents = topColor.colorComponents;
middleComponents = middleColor.colorComponents;

CGContextRef currentContext = UIGraphicsGetCurrentContext();

CGGradientRef glossGradient;
CGColorSpaceRef rgbColorspace;

size_t numberOfLocations = 3;
CGFloat locations[3] = {0.0f, MIDDLE_POINT, 1.0f};
CGFloat components[12] =
{
    topComponents.red, topComponents.green, topComponents.blue, topComponents.alpha,
    middleComponents.red, middleComponents.green, middleComponents.blue, middleComponents.alpha,
    bottomComponents.red, bottomComponents.green, bottomComponents.blue, bottomComponents.alpha
};

rgbColorspace = CGColorSpaceCreateDeviceRGB();
glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, numberOfLocations);

CGRect currentBounds = self.bounds;
CGPoint topCenter = CGPointMake(CGRectGetMidX(currentBounds), 0.0f);
CGPoint bottomCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetHeight(currentBounds));
CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, bottomCenter, 0);

CGGradientRelease(glossGradient);
CGColorSpaceRelease(rgbColorspace);

colorComponents色コンポーネントを含む構造体を返すだけです。

ログに出力すると正しい色なのですが、画面に表示すると開始色に関わらずピンクっぽい色になってしまいます。

ランダムなピンクが表示される可能性のある間違ったことはありますか?

ピンクは完全に散発的に現れます。まったく同じ値からロードしますが、めったにありませんが、確かにピンク色で表示されます。異なる値からロードしても同じ結果が得られます。1~2%の確率で発生します。

4

1 に答える 1

0

UIColor の定義済みの色を使用する機会はありますか? (たとえば、greenColor) これらは適切なコンポーネントを生成しないことがわかりました。

リビウ

于 2012-12-28T20:46:12.283 に答える