CAReplicatorLayer

CAReplicatorLayer

CAReplicatorLayer的目的是为了快速转变许多相似之图层。它会绘制一个或多独图层的子图层,并以每个复制体上采取不同的换。看上去演示能够更加解释这些,我们来写单例证吧。

        今天十八年达到了热搜

还图层(Repeating Layers)

清单6.8遇,我们当屏幕的中级创建了一个略带白色方块图层,然后据此CAReplicatorLayer变更十单图层组成一个周。instanceCount属性指定了图层需要再行多少坏。instanceTransform指定了一个CATransform3D3D变换(这种情形下,下一致贪图层的位移和转将见面倒至周的生一个碰)。

改换是逐日增加的,每个实例都是相对于前一模一样实例布局。这就是为何这些复制体最终不见面冒出在兴位置及,图6.8是代码运行结果。

清单6.8 用CAReplicatorLayer再也图层

葡京游戏网址 1葡京游戏网址 2

 1 @interface ViewController ()
 2 
 3 @property (nonatomic, weak) IBOutlet UIView *containerView;
 4 
 5 @end
 6 
 7 @implementation ViewController
 8 - (void)viewDidLoad
 9 {
10     [super viewDidLoad];
11     //create a replicator layer and add it to our view
12     CAReplicatorLayer *replicator = [CAReplicatorLayer layer];
13     replicator.frame = self.containerView.bounds;
14     [self.containerView.layer addSublayer:replicator];
15 
16     //configure the replicator
17     replicator.instanceCount = 10;
18 
19     //apply a transform for each instance
20     CATransform3D transform = CATransform3DIdentity;
21     transform = CATransform3DTranslate(transform, 0, 200, 0);
22     transform = CATransform3DRotate(transform, M_PI / 5.0, 0, 0, 1);
23     transform = CATransform3DTranslate(transform, 0, -200, 0);
24     replicator.instanceTransform = transform;
25 
26     //apply a color shift for each instance
27     replicator.instanceBlueOffset = -0.1;
28     replicator.instanceGreenOffset = -0.1;
29 
30     //create a sublayer and place it inside the replicator
31     CALayer *layer = [CALayer layer];
32     layer.frame = CGRectMake(100.0f, 100.0f, 100.0f, 100.0f);
33     layer.backgroundColor = [UIColor whiteColor].CGColor;
34     [replicator addSublayer:layer];
35 }
36 @end

View Code

 

Swift 3.0 代码

葡京游戏网址 3葡京游戏网址 4

 1 //    CAReplicatorLayer
 2     private lazy var replicatorView: UIView! = UIView()
 3 
 4 func replicatorLayerOfView()  {
 5         self.view.addSubview(self.replicatorView)
 6         let replicator = CAReplicatorLayer()
 7         replicator.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
 8         self.replicatorView.layer.addSublayer(replicator)
 9         
10         replicator.instanceCount = 10
11         
12         var transform = CATransform3DIdentity
13         transform = CATransform3DTranslate(transform, 0, 200, 0)
14         transform = CATransform3DRotate(transform, .pi / 5.0, 0, 0, 1)
15         transform = CATransform3DTranslate(transform, 0, -200, 0)
16         replicator.instanceTransform = transform
17         
18         replicator.instanceBlueOffset = -0.1
19         replicator.instanceGreenOffset = -0.1
20         
21         let layer = CALayer()
22         layer.frame = CGRect(x: 30, y: 30, width: 30, height: 30)
23         layer.backgroundColor = UIColor.white.cgColor
24         replicator.addSublayer(layer)
25         
26         self.replicatorView.snp.makeConstraints { (make) in
27             make.top.equalTo(self.gradientView)
28             make.size.equalTo(self.gradientView)
29             make.left.equalTo(self.gradientView.snp.right).inset(-10)
30         }
31         
32     }

View Code

 

 

葡京游戏网址 5

 

图6.8 用CAReplicatorLayer创造同围绕图层

在意到当图层在重新的时光,他们之颜料吗以变化无常:这是因此instanceBlueOffsetinstanceGreenOffset性能实现的。通过慢慢回落蓝色与绿色通道,我们日益将图层颜色转换成为了革命。这个复制效果看起颇酷,但是CAReplicatorLayer真的使及骨子里程序上的景象比如:一个戏耍被导弹的轨迹云,或者粒子爆炸(尽管iOS
5已经引入了CAEmitterLayer,它又适合创建任意的粒子效果)。除此之外,还有一个实在运用是:反射。

 

葡京游戏网址 6

反射

使用CAReplicatorLayer连采取一个乘比例变换于一个复制图层,你就是可以创造指定视图(或全视图层次)内容的镜像图片,这样就创造了一个实时的『反射』效果。让咱们来尝试实现者创意:指定一个继续给UIViewReflectionView,它见面自动发出内容的反射作用。实现之功效的代码很粗略(见清单6.9),实际上用ReflectionView实现这个效果会再简明,我们一味葡京游戏网址需要将ReflectionView的实例放置于Interface
Builder(见图6.9),它就会见实时生成子视图的反光,而不欲别的代码(见图6.10).

清单6.9 用CAReplicatorLayer活动绘制反射

葡京游戏网址 7葡京游戏网址 8

 1 #import "ReflectionView.h"
 2 #import 
 3 
 4 @implementation ReflectionView
 5 
 6 + (Class)layerClass
 7 {
 8     return [CAReplicatorLayer class];
 9 }
10 
11 - (void)setUp
12 {
13     //configure replicator
14     CAReplicatorLayer *layer = (CAReplicatorLayer *)self.layer;
15     layer.instanceCount = 2;
16 
17     //move reflection instance below original and flip vertically
18     CATransform3D transform = CATransform3DIdentity;
19     CGFloat verticalOffset = self.bounds.size.height + 2;
20     transform = CATransform3DTranslate(transform, 0, verticalOffset, 0);
21     transform = CATransform3DScale(transform, 1, -1, 0);
22     layer.instanceTransform = transform;
23 
24     //reduce alpha of reflection layer
25     layer.instanceAlphaOffset = -0.6;
26 }
27 
28 - (id)initWithFrame:(CGRect)frame
29 {
30     //this is called when view is created in code
31     if ((self = [super initWithFrame:frame])) {
32         [self setUp];
33     }
34     return self;
35 }
36 
37 - (void)awakeFromNib
38 {
39     //this is called when view is created from a nib
40     [self setUp];
41 }
42 @end

View Code

葡京游戏网址 9

 

       
翻了翻译自己十八春秋之相片,诺,就是这张(转不恢复,就这样凑合着圈吧)

葡京游戏网址 10

当下张像是和朋友同片洗澡时拍的,为什么笑我可记不起来了,只了解,当时,我很开心,真的好开心。

十八年份那年,我好上一个少年,我拿好收藏于各级一样不成玩笑着,喜欢异高的个头,喜欢异大大的双料眼皮,恨自己从不同摆放自信的淘气囊去戳破这总体,最后,用一个嬉戏开始了表白,用没有说出口的话语了了这次单相思,一种植他身边熟悉的总人口且明白自家爱不释手异而异不明白的涉,用娱乐换来平等摆设合照,现在想想,十八载的自身实在就累,绕来绕去只是为那同样布置合照,却不敢用那句话说讲。十八秋之自丢了那相同遗弃丢勇气,不后悔的胆气。

十八载那年,我喜欢笑,开怀大笑,那个时刻的我心里仿佛并从未那基本上闹心的事体,毫无笑点的截,我得以哄大体上上。同桌的一个动作,一个表情,都足以叫自身崩溃。从小大大咧咧的本身乐起来有些豪爽,当同学等的眼光聚集到本人身上时才会有消退。那同样年,真好,我喜欢笑的斗嘴之自,发自内心的那种。

十八春那同样年,可以笑的肆无忌惮,哭的不用理由,喜欢一个人数梦寐以求吃天下知道,所以,十八东永远是十八春秋,永远回不错过之十八寒暑,只能在在记忆受到的慌年龄。

还记着上次因公交回家,公交车上的电视广播中播放正自失去学了主题曲,抓在手环的我,第一赖任歌听哭,人家都说最害怕听明白一首歌,那一刻,我理解了。

十八寒暑的肆无忌惮,

十八年之绝不理由,

十八年份的喷饭,

本人莫容许再次产生一致涂鸦十八载,希望十八岁之君珍惜你抱有的下。

举凡哪个好浅了时,又是哪位写了时。