0

ここで説明する方法を使用しUIViewて、サブクラスを作成せずにバニラ インスタンスのグラデーション背景を設定しています。ただし、ビューは完全に黒くなります。これが私のコードです:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 315.0f, 44.0f)];

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, 315.0, 44.0f, 8, 4 * 315, colorSpace, kCGImageAlphaNoneSkipFirst);

// Colors only for debugging purposes
CGColorRef startColor = (__bridge CGColorRef)[UIColor greenColor];
CGColorRef endColor = (__bridge CGColorRef)[UIColor redColor];
CFMutableArrayRef colors = CFArrayCreateMutable(kCFAllocatorDefault, 2, &kCFTypeArrayCallBacks);
CFArrayAppendValue(colors, startColor);
CFArrayAppendValue(colors, endColor);

CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, colors, (const CGFloat []){0.25f, 0.75f});

CGContextDrawLinearGradient(context, gradient, CGPointZero, CGPointMake(0.0f, 44.0f), 0);

CGImageRef cgImage = CGBitmapContextCreateImage(context);

UIImage *backgroundGradient = [UIImage imageWithCGImage:cgImage];
[view setBackgroundColor:[UIColor colorWithPatternImage:backgroundGradient]];

CFRelease(colors);
CGGradientRelease(gradient);
CGImageRelease(cgImage);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
return view;

作成された画像が目的のサイズ (315x44) で返されるため、コンテキストの割り当てに問題がある可能性があると思います。私は何を取りこぼしたか?この問題のデバッグに役立つ他に何を確認できますか?

4

1 に答える 1

0

それはCGColorRefあなたがする必要がある方法ではありません

[UIColor redColor].CGColor
于 2012-05-29T22:26:00.390 に答える