ВАМ нужно преобразовать CGLayerRef
в CGContextRef
Вот так:
CGContextRef context = UIGraphicsGetCurrentContext();
CGLayerRef layer = CGLayerCreateWithContext(context, myRect.size, NULL);
CGContextRef gradientContext = CGLayerGetContext(layer);
// from here we care only on this gradientContext
// somewhere call
CGContextDrawLinearGradient(gradientContext, /*other args*/
// don't forget to clean memory
CGLayerRelease(layer);
, и вы можете нарисовать градиент в контексте CGContextRef
Или, если вы хотите избежать этих преобразований,Вы можете использовать обычный CGContextRef
Вот как я добился градиента
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
// CGLayerRef gradientLayer = CGLayerCreateWithContext(ctx, myRect.size, NULL);
CGFloat colors[] =
{
204.0 / 255.0, 224.0 / 255.0, 244.0 / 255.0, 1.00, //color 1
100 / 255.0, 200 / 255.0, 50 / 255.0, 1.00, // color 2
0.0, 0.0, 0.0, 1.00, // color3
};
CGFloat locations[3] = { 0.0, 0.5, 1.0 }; // 3 locations
CGGradientRef myGradient = CGGradientCreateWithColorComponents(rgb, colors, locations, 3);
CGColorSpaceRelease(rgb);
// CGContextRef layerContext = CGLayerGetContext(gradientLayer);
CGFloat minX = CGRectGetMinX(self.bounds);
CGFloat minY = CGRectGetMinY(self.bounds);
CGFloat maxY = CGRectGetMaxY(self.bounds);
CGContextBeginPath(ctx);
CGRect clip = self.bounds;
CGContextAddRect(ctx, clip);
//release memory
CGContextClip(ctx);
CGContextDrawLinearGradient(ctx, myGradient, CGPointMake(minX,minY), CGPointMake(minX,maxY), kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
CGGradientRelease(myGradient);
Используйте приведенный выше код для получения градиента. Конечно, вы можете настраивать как местоположения, так и цвета, чтобы получитьэффект, который вы хотите, но помните, что местоположение всегда находится между 0,0 и 1,0