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];

配合CAShapeLayer使用

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

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

@interface RootViewController ()

@property (nonatomic, strong) GCDTimer  *timer;

@end

// 将常数转换为度数
#define   DEGREES(degrees)  ((M_PI * (degrees))/ 180.f)

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];

    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 redColor].CGColor,
                          (__bridge id)[UIColor whiteColor].CGColor,
                          (__bridge id)[UIColor redColor].CGColor];
    colorLayer.locations  = @[@(-0.2), @(-0.1), @(0)];

    // 起始点
    colorLayer.startPoint = CGPointMake(0, 0);

    // 结束点
    colorLayer.endPoint   = CGPointMake(1, 0);

    CAShapeLayer *circle = [RootViewController LayerWithCircleCenter:CGPointMake(102, 100)
                                                              radius:80
                                                          startAngle:DEGREES(0)
                                                            endAngle:DEGREES(360)
                                                           clockwise:YES
                                                     lineDashPattern:nil];
    circle.strokeColor = [UIColor redColor].CGColor;
    [self.view.layer addSublayer:circle];
    circle.strokeEnd = 1.f;
    colorLayer.mask = circle;

    _timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];
    [_timer event:^{

        static int i = 0;
        if (i++ % 2 == 0)
        {
            CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@"locations"];
            fadeAnim.fromValue = @[@(-0.2), @(-0.1), @(0)];
            fadeAnim.toValue   = @[@(1.0), @(1.1), @(1.2)];
            fadeAnim.duration  = 1.5;
            [colorLayer addAnimation:fadeAnim forKey:nil];
        }

    } timeInterval:NSEC_PER_SEC];
    [_timer start];
}

+ (CAShapeLayer *)LayerWithCircleCenter:(CGPoint)point
                                 radius:(CGFloat)radius
                             startAngle:(CGFloat)startAngle
                               endAngle:(CGFloat)endAngle
                              clockwise:(BOOL)clockwise
                        lineDashPattern:(NSArray *)lineDashPattern
{
    CAShapeLayer *layer = [CAShapeLayer layer];

    // 贝塞尔曲线(创建一个圆)
    UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(0, 0)
                                                        radius:radius
                                                    startAngle:startAngle
                                                      endAngle:endAngle
                                                     clockwise:clockwise];

    // 获取path
    layer.path = path.CGPath;
    layer.position = point;

    // 设置填充颜色为透明
    layer.fillColor = [UIColor clearColor].CGColor;

    // 获取曲线分段的方式
    if (lineDashPattern)
    {
        layer.lineDashPattern = lineDashPattern;
    }

    return layer;
}

@end
时间: 2024-11-01 06:21:35

CAGradientLayer的一些属性解析的相关文章

Event altKey,ctrlKey,shiftKey属性解析

 本篇文章主要是对Event altKey,ctrlKey,shiftKey属性解析了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 event.altKey  功能:检测事件发生时Alt键是否被按住了.   语法:event.altKey   取值:true | false   说明:   altKey属性为true表示事件发生时Alt键被按下并保持,为false则Alt键没有按下.  altKey属性可结合鼠标或键盘使用,多用于制作一些快捷操作方式.    event.ctrl

CALayer的additive属性解析

CALayer的additive属性解析 效果: 源码:https://github.com/RylanJIN/ShareOfCoreAnimation // // CAPartAViewController.m // ShareOfCoreAnimation // // Created by xjin on 8/8/14. // Copyright (c) 2014 ArcSoft. All rights reserved. // #import "CAPartAViewController.

Android中Activity与Task相关的属性解析

与Task相关的属性解析 android:allowTaskReparenting     用来标记Activity能否从启动的Task移动到有着affinity的Task(当这个Task进入到前台时)--"true",表示能移动,"false",表示它必须呆在启动时呆在的那个Task里.    如果这个特性没有被设定,设定到<application>元素上的allowTaskReparenting特性的值会应用到Activity上.默认值为"

JavaScript中Boolean对象的属性解析_基础知识

constructor 属性 实例 返回通过 myvar 对象的原型创建的函数: var myvar = new Boolean(1); myvar.constructor; 结果输出: function Boolean() { [native code] } 定义和用法 constructor 属性返回对创建此对象的 Boolean 函数的引用. prototype 构造器为 Boolean 对象创建一个新的方法: Boolean.prototype.myColor=function() {

优化Duilib图片属性解析代码,提升绘制效率

转载请说明原出处,谢谢~·http://blog.csdn.net/zhuhongshu/article/details/51245751          好长时间没写duilib博客了,最近在写毕业设计,毕设的软件界面自然就用比较熟悉的Duilib来搞了,正好把Duilib的一些地方一起改改.          Duilib的图片绘制代码中有个影响性能的地方,所有的控件的图片绘制都是调用CControlUI的DrawImage函数,而此函数调用了CRenderEngine的DrawImage

AngularGauge 属性解析详解_AngularJS

<Chart bgColor='FFFFFF' upperLimit='120' lowerLimit='0' baseFontColor='666666' majorTMNumber='10' majorTMColor='666666' majorTMHeight='8' minorTMNumber='5' minorTMColor='666666' minorTMHeight='3' pivotRadius='10' showGaugeBorder='0' gaugeOuterRadius=

全民飞机大战路西法属性解析攻略

全民飞机大战路西法是官网在八月最后推出的新战机,相信还有不少小伙伴们对于路西法的属性还不是很了解,下面小编为小伙伴们带来了全民飞机大战路西法属性解析攻略,希望对小伙伴们有所帮助.感兴趣的小伙伴们下面就随小编一起去看看吧! 战机星级:★★★★★ 获取方式:21998积分或积分抽奖 技能属性 初始属性lv.1 攻击力280 生命值290 攻击速度240 满级属性lv.60 攻击力1080 生命值920 攻击速度240 特殊技能 魔兵返照:每局第一次死亡后立即复活,并拥有30%的最大血量 灵魂献祭:每

net写的网站部署到IIS上,服务端控件属性解析不出来

问题描述 c#写的web程序部署在iis上,通过服务器的浏览器页面能正常加载访问.换台电脑访问出现服务端控件属性无法解析.例如:<asp:DropDownListID="ddlAppaly"runat="server"Width="150px"AutoPostBack="True"onselectedindexchanged="ddlAppaly_SelectedIndexChanged">&l

Event altKey,ctrlKey,shiftKey属性解析_javascript技巧

event.altKey 功能:检测事件发生时Alt键是否被按住了. 语法:event.altKey 取值:true | false 说明: altKey属性为true表示事件发生时Alt键被按下并保持,为false则Alt键没有按下. altKey属性可结合鼠标或键盘使用,多用于制作一些快捷操作方式. event.ctrlKey 功能:检测事件发生时Ctrl键是否被按住了. 语法:event.ctrlKey 取值:true | false 说明: ctrlKey属性为true表示事件发生时Ct