曾经在有道笔记中记载了大量的学习心得笔记,偶然发现周围好多在简书使用的,因此从今以后,我也加入简书这个大家庭,将有道笔记中心得分享给大家。清零心态,与大家共同成长。欢迎大家点评,我叫小马哥!哈哈
前言
1:(圆角、阴影、边框、3D形变)
哪些需要引入Quartzcore.framework,并#importCALayer、Core Animation、图形上下文
2.Core Animation是跨平台的(iOS和MAC OS X),也就是说Core Animation可以用于iPhone和MAC台式机的开发,像UIKit框架就不能用于MAC台式机的开发
(UIKit框架只能应用在iOS而不能用于Mac,但是Quartz 2D是可以跨平台的,因此在使用颜色时,不能直接使用UIColor而需要将颜色转成CGColor)
上下文中是这样设置颜色的([[UIColor redColor]set];)
3.每一个UIView都有一个Layer属性
4.CALayer可以做圆角、阴影、边框、3D形变(包括平移、缩放、旋转)
5.3D形变属性既可以用形变函数指定,也可以用keyPath指定。区别在于,形变函数不能叠加,keyPath可以叠加。
举例:先平移、再缩放、再旋转。用形变函数的效果是只进行了旋转。用keyPath可以使得平移、缩放、旋转同时叠加了。
6.UIView通过CALayer可以使得圆角、阴影、边框、3D形变叠加。
但是UIImageView通过CALayer,圆角和阴影不可同时运用。
•UIImageView中不仅一个子图层,因此设置圆角时需要使用setMasksToBounds:YES,让所有子图层跟随边框,不过设置该属性后,无法使用阴影效果•解决办法:可以在底层附加一个UIView实现阴影效果
7.关于圆角的说明
若圆角半径等于视图的一半时,那么视图就变成了一个圆
8.关于形变中的旋转(x,y,z):一般设Z为1,其实设多大都没实际意义。不用设置x,y
案例1:
1.UIVIew的layer
- (void)myViewLayerDemo
{
// 自定义UIView的图层属性
UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(50, 50, 100, 100)];
[myView setBackgroundColor:[UIColor redColor]];
[self.view addSubview:myView];
1) 圆角半径
myView.layer.cornerRadius = 50.0f;
2) 阴影
// 因为Core Animation是跨平台的,基于QuartzCore框架,是因为UIKit框架,仅能适用于iOS平台
// 在Core Animation中不能使用任何跟UI有关的方法
// 要设置阴影除了颜色之外,还需要指定其他偏移量和透明度参数
1> 阴影颜色
[myView.layer setShadowColor:[UIColor lightGrayColor].CGColor];
2> 阴影偏移量
[myView.layer setShadowOffset:CGSizeMake(0, 10)];
3> 阴影的透明度
[myView.layer setShadowOpacity:1.0f];
3) 边框
[myView.layer setBorderColor:[UIColor whiteColor].CGColor];
[myView.layer setBorderWidth:3.0f];
}
2.UIImageView的layer (这个特殊,圆角和阴影不能同时存在 Label圆角也是需要设定这个)
- (void)myImageLayerDemo
{
UIImage *image = [UIImage imageNamed:@"头像1.png"];
UIImageView *imageView = [[UIImageView alloc]initWithImage:image];
[imageView setFrame:CGRectMake(50, 50, 200, 200)];
[self.view addSubview:imageView];
// 1. 圆角半径(UIImageView和UILabel都需要)
// 提示,在imageView中,图层不止一个,如果要实现圆角效果,需要设置一个遮罩属性
// masksToBounds属性可以让imageView中的所有子图层跟随imageView一起变化
imageView.layer.cornerRadius = 50.0f;
[imageView.layer setMasksToBounds:YES];
// 2. 阴影
// 提示,如果设置了masksToBounds属性,imageView的阴影效果无效
[imageView.layer setShadowColor:[UIColor redColor].CGColor];
[imageView.layer setShadowOffset:CGSizeMake(10.0, 10.0)];
[imageView.layer setShadowOpacity:1.0];
// 3. 边框
[imageView.layer setBorderColor:[UIColor blueColor].CGColor];
[imageView.layer setBorderWidth:3.0f];
// 4. 形变属性,在CALayer中的形变属性是3D的,不再是2D的
// 提示,形变参数使用set方法时,只能应用一种形变
// 1> 平移属性(向上移动100个点)
// [imageView.layer setTransform:CATransform3DMakeTranslation(0, -100, 0)];
// // 2> 缩放属性
// [imageView.layer setTransform:CATransform3DMakeScale(0.5, 1.0, 1.0)];
// // 3> 旋转属性
// // 提示:通常在旋转时指定z轴即可,要延哪个轴旋转,指定一个数值1.0即可
// // 图像本身没有厚度,如果按照x或y旋转90度,图像是不可见的。
// [imageView.layer setTransform:CATransform3DMakeRotation(M_PI_2, 0, 0, 1.0)];
// 5. 利用keyPath设置形变,可以组合使用,但是记住不要输错
// 提示,在文档中输入transform3D可以找到对应的transform keyPath
// 1)平移
[imageView.layer setValue:@-100 forKeyPath:@"transform.translation.y"];
// 2) 缩放
[imageView.layer setValue:@0.5 forKeyPath:@"transform.scale"];
// 3) 旋转
[imageView.layer setValue:@M_PI_2 forKeyPath:@"transform.rotation.z"];
}
网友评论