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

网友评论