よりスムーズな結果を得るために、CAGardientLayerの代わりにCGGradientを使用して複数の色を渡します。
A.ヘッダーに@propertyNSArray*の色を使用してカスタムUIViewクラスを作成します。実装ファイルに、次のdrawRectメソッドを貼り付けます。
-(void)drawRect:(CGRect)rect {
//1. create vars
float increment = 1.0f / (colours.count-1);
CGFloat * locations = (CGFloat *)malloc((int)colours.count*sizeof(CGFloat));
CFMutableArrayRef mref = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
//2. go through the colours, creating cgColors and locations
for (int n = 0; n < colours.count; n++){
CFArrayAppendValue(mref, (id)[colours[n] CGColor]);
locations[n]=(n*increment);
}
//3. create gradient
CGContextRef ref = UIGraphicsGetCurrentContext();
CGColorSpaceRef spaceRef = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradientRef = CGGradientCreateWithColors(spaceRef, mref, locations);
CGContextDrawLinearGradient(ref, gradientRef, CGPointMake(0.0, 0.0), CGPointMake(0.0, self.frame.size.height), kCGGradientDrawsAfterEndLocation);
CGColorSpaceRelease(spaceRef);
CGGradientRelease(gradientRef);
}
B.カスタムクラスを使用するviewControllerで、それを初期化し、フレームとその色を設定します。複数の色で機能し、この場合は上から下に実行されます。
Background * bg = [Background new];
[bg setFrame:self.view.bounds];
[bg setColours:@[[UIColor blueColor],[UIColor purpleColor]]];
[self.view addSubview:bg];
これは、CAGradientLayerを使用するよりも滑らかなグラデーションであり、色にアルファをドロップするとより目立ちます。