您的位置:首页 > 移动开发 > IOS开发

iOS 视图颜色渐变详解

2016-04-26 11:58 363 查看
// 初始化一个试图 (方法一)
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 100, 200, 30)];
view.backgroundColor = [UIColor greenColor];
[self.view addSubview:view];
CAGradientLayer *layer = [CAGradientLayer layer];
layer.frame = view.bounds;
layer.colors = [NSArray arrayWithObjects:(id)[UIColor redColor].CGColor,
(id)[UIColor yellowColor].CGColor,
(id)[UIColor greenColor].CGColor,nil]; // 可以只填一中颜色
layer.startPoint = CGPointMake(0, 1);
layer.endPoint = CGPointMake(1, 1); // 这里面数字范围改动在(0-1)
[view.layer insertSublayer:layer atIndex:0]; // 添加到试图layer上
// 方法二
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat locations[] = {0,1};
NSArray *colors = @[(id)[UIColor redColor].CGColor,
(id)[UIColor yellowColor].CGColor,
(id)[UIColor greenColor].CGColor];
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef) colors, locations);
CGColorSpaceRelease(colorSpace);

CGPoint startPoint = (CGPoint){view.frame.size.width * 0, view.frame.size.height * 1};
CGPoint endPoint = (CGPoint){view.frame.size.width * 1, view.frame.size.height * 1};
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);

CGGradientRelease(gradient);
UIGraphicsPopContext();


// 方法三
CIFilter *ciFilter = [CIFilter filterWithName:@"CILinearGradient"];
CIVector *vector0 = [CIVector vectorWithX:view.frame.size.width * _Point0.x Y:view.frame.size.height * (1 - _Point0.y)];
CIVector *vector1 = [CIVector vectorWithX:view.frame.size.width * Point1.x Y:view.frame.size.height * (1 - Point1.y)];
[ciFilter setValue:vector0 forKey:@"Point0"];
[ciFilter setValue:vector1 forKey:@"Point1"];
[ciFilter setValue:[CIColor colorWithCGColor:_inputColor0.CGColor] forKey:@"inputColor0"];
[ciFilter setValue:[CIColor colorWithCGColor:_inputColor1.CGColor] forKey:@"inputColor1"];

CIImage *ciImage = ciFilter.outputImage;
CIContext *con = [CIContext contextWithOptions:nil];
CGImageRef resultCGImage = [con createCGImage:ciImage
fromRect:rect];
UIImage *resultUIImage = [UIImage imageWithCGImage:resultCGImage];
CGImageRelease(resultCGImage);

[resultUIImage drawInRect:rect];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: