CAGradientLayer的一些属性解析 - 游贤明

CAGradientLayer的一些属性解析

iOS中Layer的坐标系统:

效果:

- (void)viewDidLoad
{
    [super viewDidLoad];

    CAGradientLayer *colorLayer = [CAGradientLayer layer];
    colorLayer.frame    = (CGRect){CGPointZero, CGSizeMake(200, 200)};
    colorLayer.position = self.view.center;
    [self.view.layer addSublayer:colorLayer];

    // 颜色分配
    colorLayer.colors = @[(__bridge id)[UIColor redColor].CGColor,
      (__bridge id)[UIColor greenColor].CGColor,
      (__bridge id)[UIColor blueColor].CGColor];
    
    // 颜色分割线
    colorLayer.locations  = @[@(0.25), @(0.5), @(0.75)];
    
    // 起始点
    colorLayer.startPoint = CGPointMake(0, 0);
    
    // 结束点
    colorLayer.endPoint   = CGPointMake(1, 0);
}

颜色分配严格遵守Layer的坐标系统,locations,startPoint,endPoint都是以Layer坐标系统进行计算的.

而locations并不是表示颜色值所在位置,它表示的是颜色在Layer坐标系相对位置处要开始进行渐变颜色了.

CAGradientLayer 的这四个属性 colors locations startPoint endPoint 都是可以进行动画的哦.

附录:

稍微复杂点的动画效果

//
//  RootViewController.m
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "YXGCD.h"

@interface RootViewController ()

@property (nonatomic, strong) GCDTimer  *timer;

@end

@implementation RootViewController

- (void)viewDidLoad
{
  [super viewDidLoad];

  CAGradientLayer *colorLayer = [CAGradientLayer layer];
  colorLayer.backgroundColor = [UIColor blueColor].CGColor;
  colorLayer.frame	= (CGRect){CGPointZero, CGSizeMake(200, 200)};
  colorLayer.position = self.view.center;
  [self.view.layer addSublayer:colorLayer];

  // 颜色分配
  colorLayer.colors = @[(__bridge id)[UIColor cyanColor].CGColor,
              (__bridge id)[UIColor orangeColor].CGColor,
              (__bridge id)[UIColor magentaColor].CGColor];
  
  // 起始点
  colorLayer.startPoint = CGPointMake(0, 0);
  
  // 结束点
  colorLayer.endPoint   = CGPointMake(1, 0);
  
  _timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];
  [_timer event:^{
    
    static CGFloat test = - 0.1f;
    
    if (test >= 1.1)
    {
      test = - 0.1f;
      [CATransaction setDisableActions:YES];
      colorLayer.locations  = @[@(test), @(test + 0.05), @(test + 0.1)];
    }
    else
    {
      [CATransaction setDisableActions:NO];
      colorLayer.locations  = @[@(test), @(test + 0.05), @(test + 0.1)];
    }
    
    test += 0.1f;
    
  } timeInterval:NSEC_PER_SEC];
  [_timer start];
}

@end

_timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];
  [_timer event:^{
    
    static CGFloat test = - 0.1f;
    
    if (test >= 1.1)
    {
      test = - 0.1f;
      [CATransaction setDisableActions:NO];
      colorLayer.locations  = @[@(test), @(test + 0.01), @(test + 0.011)];
    }
    else
    {
      [CATransaction setDisableActions:NO];
      colorLayer.locations  = @[@(test), @(test + 0.01), @(test + 0.011)];
    }
    
    test += 0.1f;
    
  } timeInterval:NSEC_PER_SEC];
  [_timer start];
原文  http://www.cnblogs.com/YouXianMing/p/3793913.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值