美文网首页
CAReplicatorLayer(重复图层二)

CAReplicatorLayer(重复图层二)

作者: 莪的世界木有如果 | 来源:发表于2018-08-20 15:27 被阅读31次

    上篇说道了CAReplicatorLayer的属性和基本用法,接下来利用CAReplicatorLayer来实现一个倒影反射的效果。如图

    反射效果

    GitHub地址在layer/CAReplicatorLayer/ReplicatorController里面

    指定一个继承于UIView的ReflectionView,它会自动产生内容的反射效果。只需要把ReflectionView的实例放置于Interface Buider,或者代码实现生成ReflectionView的实例,添加到view上。这样就会生成子视图的反射。

    ReflectionView.h文件

    #import <UIKit/UIKit.h>
    
    @interface ReflectionView : UIView
    
    @end
    

    ReflectionView.m文件

    #import "ReflectionView.h"
    
    @implementation ReflectionView
    
    + (Class)layerClass{
        return [CAReplicatorLayer class];
    }
    
    -(void)setUp{
    //    创建一个replicatorLayer
        CAReplicatorLayer * layer = (CAReplicatorLayer *)self.layer;
    //    设置重复层个数
        layer.instanceCount = 2;
    
    //    设置重复层的transform
        CATransform3D transform = CATransform3DIdentity;
    //    设置位移量
        CGFloat verticalHeight = self.bounds.size.height + 2;
    //    设置沿着Y轴位移verticalHeight
        transform = CATransform3DTranslate(transform, 0, verticalHeight, 0);
    //    设置Y方向缩放-1,
        transform = CATransform3DScale(transform, 1, -1, 1);
    //    添加transform
        layer.instanceTransform = transform;
    //    设置重复层的alpha变化
        layer.instanceAlphaOffset = -0.6;
    }
    
    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            [self setUp];
        }
        return self;
    }
    
    - (void)awakeFromNib{
        [super awakeFromNib];
        [self setUp];
    }
    

    调用:
    1、Interface Buider(图一)


    图一

    这里一定要注意红色框内,要指定这个view为ReflectionView;

    2、代码调用

    ReflectionView * view = [[ReflectionView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
        view.center = CGPointMake(kWidth/2, kHeight/2-200);
        UIImageView * img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
        img.image = [UIImage imageNamed:@"reflection_image"];
        [view addSubview:img];
        [self.view addSubview:view];
    

    这样就实现了一个倒影反射的效果。参考《ios核心动画高级技巧》一书里面的反射。

    相关文章

      网友评论

          本文标题:CAReplicatorLayer(重复图层二)

          本文链接:https://www.haomeiwen.com/subject/gmlliftx.html