美文网首页
第三篇:CALayer能力之视觉效果

第三篇:CALayer能力之视觉效果

作者: 意一ineyee | 来源:发表于2018-01-22 17:07 被阅读17次

CALayer能为我们实现一些UIView实现不了的视觉效果,如:

  • 切圆角
  • 设置边框
  • 设置阴影效果
  • 使用寄宿图和mask属性切出指定形状的layer

简单介绍如下:

//
//  ViewController.m
//  CoreAnimation
//
//  Created by 意一yiyi on 2017/11/13.
//  Copyright © 2017年 意一yiyi. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    imageView.backgroundColor = [UIColor redColor];
    [self.view addSubview:imageView];
    
    // 1、切圆角:cornerRadius
    imageView.layer.cornerRadius = 10;
    
    // 但是我们会发现cornerRadius仅仅对纯色块起作用,如果view或者layer上多了些图片等内容,cornerRadius一个人就无法完成效果了,就需要用到clipsToBounds或者masksToBounds来切去内容超出边界的部分
    imageView.image = [UIImage imageNamed:@"testImage"];
//    imageView.clipsToBounds = YES;
    imageView.layer.masksToBounds = YES;
    
    
    // 2、设置边框:borderColor和borderWidth
    imageView.layer.borderWidth = 5;
    imageView.layer.borderColor = [UIColor orangeColor].CGColor;
    
    
    // 3、设置阴影效果:阴影效果不能和clipsToBounds/masksToBounds一起用,因为阴影效果本身就是在图层的边界之外的,用了 clipsToBounds/masksToBounds就会被切掉。因此如果我们想要既有阴影又有剪裁效果,那就只能弄两层layer,一个呈现剪裁效果,一个呈现阴影效果
    UIView *shadowView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    shadowView.backgroundColor = [UIColor redColor];
    shadowView.layer.shadowColor = [UIColor orangeColor].CGColor;// 设置阴影的颜色
    shadowView.layer.shadowOffset = CGSizeMake(-3, 3);// 设置阴影的偏移量,控制着阴影的方向,它是一个CGSize的值,宽度控制着阴影横向的偏移量,高度控制着纵向的偏移量。shadowOffset的默认值是 {0, -3},意即阴影相对于Y轴有3个点的向上位移
    shadowView.layer.shadowOpacity = 1.0;// 设置阴影的透明度,0~1
    shadowView.layer.shadowRadius = 11;// 设置阴影的发散程度, 值越大越发散
    [self.view addSubview:shadowView];
    
    
    // 4、使用寄宿图和mask属性切出指定形状的layer
    // 比如我们要显示一个五角星,那有两种办法,一种是透明的imageVIew直接放一张五角星图片,另一种就是这种切割的方式。前者方便,而后者则可以动态地生成不同形状的layer,甚至是跟着动画实时生成
    UIImageView *starImageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 250, 100, 100)];
    starImageView.backgroundColor = [UIColor clearColor];
    starImageView.image = [UIImage imageNamed:@"星"];
    [self.view addSubview:starImageView];
    
    UIImageView *heartImageView = [[UIImageView alloc] initWithFrame:CGRectMake(250, 250, 100, 100)];
    heartImageView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:heartImageView];
    
    CALayer *contentsLayer = [CALayer layer];
    contentsLayer.contents = CFBridgingRelease([UIImage imageNamed:@"心"].CGImage);// 要切出的形状
    contentsLayer.frame = heartImageView.bounds;// 要切成的大小
    
    heartImageView.layer.mask = contentsLayer;// 赋值就可以切出来了
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
1.png

相关文章

网友评论

      本文标题:第三篇:CALayer能力之视觉效果

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