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

iOS CAGradientLayer 详解

2016-02-03 11:06 731 查看
参考文章 http://blog.csdn.net/iunion/article/details/26221213
CAGradientLayer

产生平滑过渡色

//
//  ViewController.m
//  test_gradient_01
//
//  Created by admin on 2/3/16.
//  Copyright © 2016 jeffasd. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic, strong)UIView *contentView;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

_contentView = [UIView new];
_contentView.frame = CGRectMake(100, 100, 100, 100);
_contentView.backgroundColor = [UIColor redColor];
[self.view addSubview:_contentView];

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = self.contentView.bounds;
[self.contentView.layer addSublayer:gradientLayer];

//    gradientLayer.colors = (__bridge NSArray * _Nullable)([UIColor blueColor].CGColor);
//    gradientLayer.colors = (__bridge NSArray * _Nullable)([UIColor cyanColor].CGColor);

//渐变区域
gradientLayer.locations = @[[NSNumber numberWithFloat:0.3], [NSNumber numberWithFloat:0.8]];

gradientLayer.colors = @[(__bridge NSArray * _Nullable)([UIColor blueColor].CGColor), (__bridge NSArray * _Nullable)([UIColor redColor].CGColor)];

//    gradientLayer.startPoint = CGPointMake(0, 0);
//最大值为 (1, 1),最小值为(0, 0)
gradientLayer.startPoint = CGPointMake(1, 0);
gradientLayer.endPoint = CGPointMake(1, 1);

}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end




CAGradientLayer的属性设置

1. 类型

[objc] view
plain copy

print?





@property(copy) NSString *type

目前只有NSString * const kCAGradientLayerAxial

即线性梯度变化

2. 颜色

[objc] view
plain copy

print?





@property(copy) NSArray *colors

3. 位置参数

[objc] view
plain copy

print?





@property(copy) NSArray *locations

颜色的区间分布,locations的数组长度和colors一致, 取值范围(0, 1),而且必须是单调递增的

修改例子6.6,增加

[objc] view
plain copy

print?





<p class="p1"> gradientLayer.<span class="s1">locations</span> = <span class="s2">@[</span>[<span class="s1">NSNumber</span> <span class="s3">numberWithFloat</span>:<span class="s2">0.0</span>], [<span class="s1">NSNumber</span> <span class="s3">numberWithFloat</span>:<span class="s2">0.2</span>]<span class="s2">]</span>;</p>



[objc] view
plain copy

print?





gradientLayer.locations = @[[NSNumber numberWithFloat:0.5], [NSNumber numberWithFloat:0.7]];



4. startPoint和endPoint

[objc] view
plain copy

print?





@property CGPoint startPoint, endPoint;

取值都是相对于layer的bounds的。startPoint默认值为(0.5, 0),endPoint默认值为(0.5, 1)

修改例子6.6

gradientLayer.startPoint 分别设为 CGPointMake(0, 0);



CGPointMake(0.25, 0);



CGPointMake(0.5, 0);



CGPointMake(0.75, 0);



CGPointMake(1, 0);



综合修改例子6.6

[objc] view
plain copy

print?





- (void)viewDidLoad

{

[super viewDidLoad];

//create gradient layer and add it to our container view

CAGradientLayer *gradientLayer = [CAGradientLayer layer];

gradientLayer.frame = self.containerView.bounds;

[self.containerView.layer addSublayer:gradientLayer];

//set gradient colors

gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor,

(__bridge id)[UIColor blueColor].CGColor];

gradientLayer.locations = @[[NSNumber numberWithFloat:0.5], [NSNumber numberWithFloat:0.7]];

//set gradient start and end points

gradientLayer.startPoint = CGPointMake(0.75, 0.0);

gradientLayer.endPoint = CGPointMake(1.0, 1.0);

}



从以上可以看出startPoint和endPoint诗表示的渐变方向,locations是渐变区域。

也可以看出locations的取值是相对于startPoint和endPoint线段的。

在网上找的描述让我很是不能理解

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