iOS CoreAnimation (六) layer属性:阴影相关,边框、圆角,masksToBounds
来源:互联网 发布:9月7经济数据 编辑:程序博客网 时间:2024/06/10 16:20
嗯,圆和椭圆还不错,但如果是带圆角的矩形呢?我们现在能做到那样了么? ·-------Steve Jobs
这篇文章就几个方法,自己跑看看就行
//demo 1
overridefunc viewDidLoad() {
super.viewDidLoad()
let blueView =UIView(frame:CGRect(x:50, y: 200, width:350, height:300))
blueView.backgroundColor =UIColor.lightGray
let yellowView =UIView(frame:CGRect(x:-50, y:-50, width:200, height:200))
yellowView.backgroundColor =UIColor.yellow
blueView.addSubview(yellowView)
view.addSubview(blueView)
//请先跑一遍,再加上!(重在对比): blueView.layer.masksToBounds = true
//图层对应视图的方法效果一摸一样: blueView.clipsToBounds =true
//再跑一遍,再加上 :
· yellowView.layer.cornerRadius =15
blueView.layer.cornerRadius =15
//解释 cornerRadius : 角落的半径。就是说,圆角的半径是多少个单位
let yellowView = UIView
改成
let yellowView = UILabel
其他都不变。
label右下角的圆角没了!咋回事?
深入解释 cornerRadius :By default, the corner radius does not apply to the image in the layer’s contents property; it applies only to the background color and border of the layer. However, setting the masksToBounds property to true causes the content to be clipped to the rounded corners.
看见了吧,意思是,圆角对于layer的contents属性(我估计,实际上 只要不是UIView,且是UIView的子类,就:)不起作用。如果想让内容也圆角,就设置 那啥的属性为true
//好,再跑一遍,加上:
yellowView.layer.masksToBounds =true
//OK了
}
另外,如果想创建有些圆角有些直角的图层或视图时,需要一些不同的方法。比如使用一个图层蒙板(稍后会讲到)或者是CAShapeLayer(第六章『专用图层』会涉及)。
//再跑一遍,加上:
· blueView.layer.borderColor = UIColor.red.cgColor
blueView.layer.borderWidth =10
//看看发生了什么。 图层边的绘制。这条边线(也被称作stroke)沿着图层的 bounds 绘制,同时也包含图层的角。 边框是绘制在图层边界里面的,而且在所有子内容之前,也在子图层之前 !
为了验证在子图层之前,再跑一遍,我们加一句话来验证:
` blueView.clipsToBounds =falsedemo2: 关于图层阴影的应用
首先说明,视图的阴影操作 是通过图层间接改变了阴影(之前系列的改变也一样)。因此,以后的方法只写CALayer中定义的方法、属性。
1、shadowOpacity 属性
范围:在 0.0 (默认,不可见的阴影) 和1.0 (完全不透明的阴影) 之间的浮点数。只要设置为一个值(不是默认值),就会显示一个有轻微模糊的黑(默认)或灰色阴影稍微在图层之上(这里标记一下,是稍微之上,一会解释)。若要改动阴影的表现,你可以使用CALayer的另外三个属性:shadowColor,shadowOffset和shadowRadius。
值是0的时候,阴影就和视图一样有一个非常确定的边界线。当值越来越大的时候,边界线看上去就会越来越模糊和自然。苹果自家的应用设计更偏向于自然的阴影,所以一个非零值再合适不过了,默认 3.0。(3个点。点,像素的关系看以前的文章)
另外,我们知道 加边框是沿着图层的bounds绘制,但是阴影是沿 contents 的外形(如果有的话)绘制的!为了计算出阴影的形状,Core Animation会将寄宿图(包括子视图,如果有的话)的轮廓考虑在内,然后通过这些来完美搭配图层形状从而创建一个阴影。
因此,当阴影和裁剪扯上关系的时候就有一个头疼的限制:阴影通常就是在Layer的边界之外,如果你开启了masksToBounds属性,所有从图层中突出来的内容都会被剪掉。怎么解决呢?
用两个视图。一个画阴影的空图层,一个用裁剪的内图层。
class ViewController:UIViewController,CALayerDelegate {
overridefunc viewDidLoad() {
super.viewDidLoad()
let frame =CGRect(x: 80, y:100, width: 180, height:150)
let shadowView =UIView(frame:frame)
let blueView =UIView(frame:frame)
blueView.backgroundColor =UIColor.blue
shadowView.backgroundColor =UIColor.white
//backgroundColor默认是nil,如果也没有其他设置的话,则由定义,没有阴影,所以必须设个非clear的 BGColor
let yellowView =UILabel(frame: CGRect(x:-20, y: -20, width:100, height: 100))
yellowView.backgroundColor =UIColor.yellow
blueView.layer.cornerRadius =15
blueView.layer.masksToBounds =true
blueView.layer.borderColor =UIColor.red.cgColor
blueView.layer.borderWidth =3
shadowView.layer.cornerRadius =15
shadowView.layer.shadowOpacity =0.5
shadowView.layer.shadowOffset =CGSize(width: 0, height:5)
blueView.addSubview(yellowView)
view.addSubview(shadowView)
view.addSubview(blueView)
}
}
- iOS CoreAnimation (六) layer属性:阴影相关,边框、圆角,masksToBounds
- ios学习--layer的应用(设置UIView子类边框属性&字体阴影属性)
- 【iOS提高】CoreAnimation--Layer
- iOS-CoreAnimation之制作阴影
- Android layer-list的属性和使用详解(阴影、边框效果)
- iOS CoreAnimation (七) shadowPath指定阴影,图层蒙板
- css3边框 圆角 阴影
- iphone ios uiview uilabel 边框,圆角,阴影实现
- iphone ios uiview uilabel 边框,圆角,阴影实现
- iphone ios uiview uilabel 边框,圆角,阴影实现
- IOS--UIView 视觉效果:圆角、阴影、边框、渐变光泽
- IOS Layer的使用(阴影)
- IOS Layer的使用(阴影)
- IOS Layer的使用(阴影)
- IOS Layer的使用(阴影)
- iOS效果 :(1) CALayer 图层阴影,边框,圆角,圆型图片的阴影
- css3设置边框阴影的属性
- CoreAnimation-Layer详解
- wireshark的使用笔记
- Scrapy爬虫实战
- 【IE hack与浏览器内核】
- 十年寒窗,从高考,到程序员
- 【C++】【LeetCode】26. Remove Duplicates from Sorted Array
- iOS CoreAnimation (六) layer属性:阴影相关,边框、圆角,masksToBounds
- ros 安装
- 面向对象的抽象、接口和多态总结
- Python基础数据类型
- 线程Thread与Runnable实现
- 数据库
- (个人)AR电子书系统创新实训第五周(2)
- Spring声明式事务
- 传智播客 java基础 相关资料 Day1