CAReplicatorLayer 的主要作用是生成相似的图层。
先来一个生成一串正方形围成的圈圈的图片,代码比较简单,如下:
//// CAReplicatorLayerViewController.m// iOSanimation//// Created by biyabi on 15/12/1.// Copyright © 2015年 caijunrong. All rights reserved.//#import "CAReplicatorLayerViewController.h"@interface CAReplicatorLayerViewController ()@property (nonatomic, strong) UIView *GView;@end@implementation CAReplicatorLayerViewController- (void)viewDidLoad { [super viewDidLoad]; [self.view setBackgroundColor:[UIColor groupTableViewBackgroundColor]]; CAReplicatorLayer *replicator = [CAReplicatorLayer layer]; replicator.frame = self.GView.bounds; [self.view.layer addSublayer:replicator]; replicator.instanceCount = 10; //旋转方向和角度主要还是由自己决定 CATransform3D transform = CATransform3DIdentity; transform = CATransform3DTranslate(transform, 0, 100, 0); transform = CATransform3DRotate(transform, M_PI/5, 0, 0, 1); transform = CATransform3DTranslate(transform, 0, -100, 0); // replicator.instanceTransform = transform; replicator.instanceBlueOffset = -0.1; replicator.instanceGreenOffset = -0.1; CALayer *layer = [CALayer layer]; layer.frame = CGRectMake([UIScreen mainScreen].bounds.size.width - 100*2, 100.0f, 100.0f, 100.0f); layer.backgroundColor = [UIColor whiteColor].CGColor; [replicator addSublayer:layer];}- (UIView *)GView{ if (!_GView) { _GView = [[UIView alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width - 10*2, 94, 10,10)]; [self.view addSubview:_GView]; } return _GView;}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller.}*/@end
倒影更简单了:
//// ReView.m// iOSanimation//// Created by biyabi on 15/12/1.// Copyright © 2015年 caijunrong. All rights reserved.//#import "ReView.h"@implementation ReView- (instancetype)initWithFrame:(CGRect)frame{ if (self = [ super initWithFrame:frame]) { UIImageView *imageView = [[UIImageView alloc]initWithFrame:frame]; [self addSubview:imageView]; [imageView setImage:[UIImage imageNamed:@"icon_weibo"]]; //做倒影 CAReplicatorLayer *layer = (CAReplicatorLayer *)self.layer; layer.instanceCount = 2; CATransform3D transform = CATransform3DIdentity; CGFloat verticalOffset = frame.size.height + 2; transform = CATransform3DTranslate(transform, 0, verticalOffset, 0); transform = CATransform3DRotate(transform, M_PI, 1, 0, 0);// transform = CATransform3DScale(transform, 1, 0 , 0); layer.instanceTransform = transform; //reduce alpha of reflection layer layer.instanceAlphaOffset = -0.6; } return self;}+ (Class)layerClass{ return [CAReplicatorLayer class];}@end