6 Specialzed layers 特殊层 第二部分 读书笔记

CAGradientLayer

?

CAGradientLayer?is used to generate a smooth gradient between two or more colors. 是用来产生渐变色的。

It‘s possible to replicate the appearance of a?CAGradientLayer?using Core Graphics to draw into an ordinary layer‘s backing image, but the advantage of using a?CAGradientLayer?instead is that the drawing is hardware accelerated.

好处是硬件加速的。

Basic Gradients

?

We‘ll start with a simple diagonal gradient from red to blue (see Listing 6.6). The gradient colors are specified using the?colors?property, which is an array. The?colors?array expects values of type?CGColorRef?(which is not an?NSObject?derivative), so we need to use the bridging trick that we first saw in Chapter 2 to keep the compiler happy.

gradients colors 是一个数组,要用到CGColorRef 。

?

CAGradientLayer?also has?startPoint?and?endPoint?properties that define the direction of the gradient. These are specified in?unit coordinates, not points, so the top-left corner of the layer is specified with {0, 0} and the bottom-right corner is {1, 1}. The resulting gradient is shown in Figure 6.6.

unit coordinates,不是points,top left corner of the layer 是{0,0},而右下角是{1,1}

?

Listing 6.6?A Simple Two-Color Diagonal Gradient

@interface?ViewController ()

?

@property?(nonatomic,?weak)?IBOutlet?UIView?*containerView;

@end

@implementation?ViewController

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

//set gradient start and end points

gradientLayer.startPoint?=?CGPointMake(0,?0); gradientLayer.endPoint?=?CGPointMake(1,?1);

}

@end

?

Multipart Gradients 多部分组成的Gradients

The?colors?array can contain as many colors as you like, so it is simple to create a multipart gradient such as a rainbow. By default, the colors in the gradient will be evenly spaced, but we can adjust the spacing using the?locations?property.

?

The?locations?property is an array of floating-point values (boxed as?NSNumber?objects). These values define the positions for each distinct color in the colors array, and are specified in unit coordinates, with 0.0 representing the start of the gradient and 1.0 representing the end.

locations 属性也是一个array .这些值定义了位置,为每个颜色,并指明在unit coordinates .

?

It is not obligatory to supply a?locations?array, but if you do, you must ensure that the number of locations matches the number of colors or you‘ll get a blank gradient.

指定locations 不是强制的,但是如果你做了,你需要确保locations 的数量和colors数量相同。否则,可能会获取一个空白的gradient

Listing 6.7 shows a modified version of the diagonal gradient code from Listing 6.6. We now have a three-part gradient from red to yellow to green. A?locations?array has been specified with the values 0.0, 0.25, and 0.5, which causes the gradient to be squashed up toward the top-left corner of the view (see Figure 6.7).

?

Listing 6.7?Using the?locations?Array to Offset a Gradient

- (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?yellowColor].CGColor, (__bridge id)[UIColor?greenColor].CGColor];

//set locations

gradientLayer.locations?=?@[@0.0,?@0.25,?@0.5];

//set gradient start and end points

gradientLayer.startPoint?=?CGPointMake(0,?0);

?

gradientLayer.endPoint?=?CGPointMake(1,?1);

}

?

Figure 6.7?A three-color gradient, offset to the top left using the?locations?array

CAReplicatorLayer

?

The?CAReplicatorLayer?class is designed to efficiently generate collections of similar layers.

是为了产生相似layers的容器的。

It works by drawing one or more duplicate copies of each of its sublayers, applying a different transform to each duplicate. This is probably easier to demonstrate than to explain, so let‘s construct an example.

Repeating Layers

?

In Listing 6.8, we create a small white square layer in the middle of the screen, then turn it into a ring of ten layers using?CAReplicatorLayer. The?instanceCount?property specifies how many times the layer should be repeated.

instanceCount 属性指明了这个layer需要复制多少次?

The?instanceTransform?applies a?CATransform3D?(in this case, a translation and rotation that moves the layer to the next point in the circle).

The transform is applied incrementally, with each instance positioned relative to the previous one. This is why the duplicates don‘t all end up in the same place. Figure 6.8 shows the result.

?

Listing 6.8?Repeating Layers Using?CAReplicatorLayer

@interface?ViewController ()

@property?(nonatomic,weak)IBOutlet?UIView?*containerView;

@end

@implementation?ViewController

- (void)viewDidLoad {

[super?viewDidLoad];

//create a replicator layer and add it to our view

?

CAReplicatorLayer?*replicator = [CAReplicatorLayer?layer];

replicator.frame?=?self.containerView.bounds;

[self.containerView.layer?addSublayer:replicator];

//configure the replicator

replicator.instanceCount?=?10;

//apply a transform for each instance

?

CATransform3D?transform =?CATransform3DIdentity;

transform =?CATransform3DTranslate(transform,?0,?200,?0);

transform =?CATransform3DRotate(transform,?M_PI?/?5.0,?0,?0,?1);

transform =?CATransform3DTranslate(transform,?0, -200,?0);

?

replicator.instanceTransform?= transform;

//apply a color shift for each instance

?

replicator.instanceBlueOffset?= -0.1;

replicator.instanceGreenOffset?= -0.1;

//create a sublayer and place it inside the replicator

?

CALayer?*layer = [CALayer?layer];

layer.frame?=?CGRectMake(100.0f,?100.0f,?100.0f,?100.0f);

layer.backgroundColor?= [UIColor?whiteColor].CGColor;

[replicator?addSublayer:layer];

}

?

@end

时间: 2024-10-10 22:13:12

6 Specialzed layers 特殊层 第二部分 读书笔记的相关文章

6 Specialzed layers 特殊层 第一部分 读书笔记

6?Specialzed?layers 特殊层? 第一部分 ?读书笔记 ? Specialization is a feature of every complex organization. 专注是每个复杂系统的特性 Catharine R. Stimpson ? Up to this point, we have been working with the?CALayer?class, and we have seen that it has some useful image drawin

Android深度探索——第二章读书笔记及心得

Android开发环境搭建 ——第二章读书笔记及心得 通过本章的学习了解了如何对Ubuntu Linux下的Android进行搭建,包括搭建Android应用程序开发环境.Android NDK开发环境和交叉编译环境的搭建.了解了搭建Android环境所需要的各种东西,了解了配置ADT的必要性—以便ADT能够找到Android SDK.知道了底层开发所需要的各种工具.学会了如何在Ubuntu下安装JDK.以及编译交叉编译环境,当初在学习Linux交叉环境编译的时候就不是特别成功,中间出了很多的错

linux第二次读书笔记

<Linux内核设计与实现>读书笔记 第五章 系统调用 第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种硬件的抽象接口:保证了系统的稳定和安全,避免应用程序不正确使用硬件,窃取其他进程的资源,或做出危害系统的行为:为了实现多任务和虚拟内存. Linux提供的系统调用比大部分操作系统少得多. 5.2 API.POSIX.和C库 一个API定义了一

第二周读书笔记《构建之法》

构建之法读书笔记 #wmd-preview h1 { color: #0077bb } 构建之法读书笔记 沈三景 PB15061249 软件工程 读书笔记 前言 本周阅读了构建之法的四.五两个个章节.这三个章节主要讲述了代码规范.结对编程.团队模式.开发流程. 第四章 两人合作 首先提到的是代码规范,程序员写的代码不仅要给机器看,还要给人看.好的代码规范能事半功倍.代码规范有分为代码风格规范和代码设计规范.代码风格规范是指让代码保持简明,让代码更易读.书中给出的规范是Tab键为4个空格,行宽为1

第二章读书笔记

在ubuntu下进行android开发的环境搭建主要有以下5个部分: (1)       安装jdk (2)       安装android_sdk (3)       安装eclipse (4)       为eclipse添加adt插件 (5)       添加SDK平台和android平台 一.安装jdk 先到sun官网下载相应的jdk的bin文件:具体链接如下: 我下载的是jdk-6u38-linux-i586.bin,选择这个版本是因为这个版本之后是7以上的版本,所以这个应该会是比较稳

python基础教程第二版读书笔记

第一张 基础知识 模块 import 模块:用函数的时候格式 模块.函数 from 模块 import 函数:用函数的时候格式  函数 字符串 ‘x‘反引号(不是单引号‘’,也可用repr函数),可以将数值x变为字符串,例如x=1,print ”hello“+x(错误),print ”hello“+‘x‘(对的) r-原始字符串,即\将不作为转义符号,例如r”c:\n“ 第二章 列表和元祖(列表可以修改,元祖不能修改) 列表 x=['a',1] y=['b',2] c=[x,y] 索引 0-第一

《控制系统设计指南》第一章和第二章读书笔记(一)

第一章 控制理论简介 1.2控制系统 1.2.1控制器 控制器由控制律与功率变换器协同工作,控制律只生成信息,必须施加能量才能控制被控对象. 1.2.2被控机器 被控机器由被控对象与反馈装置组成. 第二章 频率域研究法 2.1拉普拉斯变换 2.2传递函数 一个频率域传递函数只限于描述线性.时不变元件.在现实中并不存在完全满足这几个限制的系统,为了解决这个问题,可以设计补偿环节使得系统非常接近线性时不变系统. 2.4框图 反馈回路的简化: Mason信号流程图: 2.5相位与增益 增益通常用dB表

Android深度探索(卷一)第二章读书笔记

第二章讲述了搭建Android开发环境.我们首先需要知道Android底层开发需要哪些工具.开发.测试和调试Linux驱动.HAL程序库需要的工具有:JDK6或以上版本.Eclipse3.4或以上版本.ADT.CDT.Android SDK.Android NDK.交叉编译环境.Linux内核源代码.Android源代码.minicom. 在明确开发工具后,我们就要进行开发环境的搭建. 安装JDK.方法一:通过官网下载JDK,并进行配置.配置需要在profile文件来设置PATH环境变量.过程为

第二周读书笔记

本周我读的书是Frederick P.Brooks所著的<人月神话>这一十分著名的书籍.这是一本非常典型的外国科技作品:富含了幽默感和形象生动的比喻:"焦油坑"."人月神话"."外科手术队伍",看到这些词,你会很快在脑海中建立起一个很清晰的画面,同时也会产生很多疑问:这个东西,这幅画面的特点是什么?为什么要提起它?作者又想让我关注什么?而当我们仔细阅读其中的内容,很快就会发现,怀揣着这些问题的我们,可以迅速的感知到作者想要表达的重点是