2

次のコードのみを含むプレーンなUIViewサブクラス:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Initialization code

        CAGradientLayer* gradientLayer = [CAGradientLayer layer];
        gradientLayer.colors = [NSArray arrayWithObjects:[UIColor whiteColor], [UIColor blackColor], nil];
        gradientLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:1.0], nil];

        [self.layer addSublayer:gradientLayer];

    return self;
}

EXC_BAD_ACCESSを使用してランタイムを強制終了します(いいえ、要求する前にゾンビはありません)。

また、CAGradientLayerが過剰にリリースされることはありません。レイヤーに複数のフローティング保持を配置しても効果はありません。

(ちなみに、これまで行ってきたどのプロジェクトでも、CAGradientLayerが実際に機能するのを見たことがありません。呪われていると思います:)。アニメーション化されたグラデーションが必要な場合を除いて、これは使用しません。AppleのCGGradientクラスはconst配列のみをサポートしているため、アニメーションコードはひどくバグが発生しやすくなります)

4

1 に答える 1

5

問題は次の場所にある可能性があります。

gradientLayer.colors = [NSArray arrayWithObjects:[UIColor whiteColor], [UIColor blackColor], nil];

これらの色は Core Graphic と同等である必要があるため、これが機能する可能性があります。

gradientLayer.colors = [NSArray arrayWithObjects:(__bridge id)[UIColor whiteColor].CGColor, (__bridge id)[UIColor blackColor].CGColor, nil]; 
于 2012-04-26T20:51:30.520 に答える