美文网首页
视图的图层

视图的图层

作者: 有思想的火柴 | 来源:发表于2016-01-09 11:17 被阅读57次

    iOS封装的UIView动画实现很简单,但是他的灵活性比较低。CALayer是和UIView同层级的。

    CALayer的功能:

    1.阴影,圆角,带颜色的边框

    2.3D变换

    3.非矩形范围

    4.透明遮罩

    5.多级非线性动画

    CALayer 有一个属性叫做contents,这个属性的类型被定义为id,意味着它可以是任何类型的对象。但是如果不是CGImage的对象的话就没什么效果。iOS开发中有个“Toll-free bridging”的名词,意思是可以在某个框架的方法或函数同时使用Core Foundatio和Foundation 框架中的某些类型。

    类型转换关键字区别:

    __bridge (相当于assign 还是要自己管理对象)

    __bridge_transfer(相当于copy后release   转让了自己对对象的所有权交给别人去管理)

    __bridge_retained(相当于retain 增加额对象的引用计数)

    ok再看看contents真正要赋值的类型应该是CGImageRef,因为CGImageRef并不是一个真正的Cocoa对象,而是一个Core Foundation类型。所以赋值的时候是这样的layer.contents = (__bridge id)image.CGImage;

    这样我们就没有用UIImageView展示一张图片了,不过这时候你可能会发现问题,就是这个图片可能看着不自然。。。其实是因为拉伸的缘故。

    有两种解决办法:

    设置view的contentMode属性可以进行配置。

    1.view.contentMode = UIViewContentModeScaleAspectFit;

    2.view.layer.contentsGravity = kCAGravityResizeAspect;

    这样看着就不会拉伸了。

    还有一个属性叫做contentsScale,寄宿图的像素尺寸和视图大小的比例,默认情况下它是一个值为1.0的浮点数。

    View.layer.contentsScale = 4.f;//表示每个点由4个像素绘制。

    如果contentsGravity属性是kCAGravityResizeAspect那么contentsScale就失效了。因为kCAGravityResizeAspect仅仅是将图片进行拉伸适应了而已

    下面介绍一个强大的属性contentsRect,默认的contentsRect是{0, 0, 1, 1}就是说整个寄宿图就是可见的。前两个参数就是距离原点的数值,后面的是显示这个图片的多少比例的图像。实际使用时可以利用这个属性进行拼接图片。


    圆角属性

    CALayer有一个叫做conrnerRadius的属性控制着图层角的曲率,默认0是直角,设置为宽高的一半的话就是一个圆;如果把CALayer的masksToBounds设置成YES的话,图层里面的所有东西都会被截取。

    阴影属性

    现在到处都是扁平化设计,以至于阴影属性一般用不到,但是阴影属性本身还是很棒的,我有个设计朋友他就喜欢给他们扔立体感的控件效果图~~

    1 、shadowOpacity属性就是控制阴影强度的。

    2、shadowColor属性控制着阴影的颜色,和borderColor和backgroundColor一样,它的类型也是CGColorRef

    3、shadowOffset属性控制着阴影的方向和距离。它是一个CGSize的值,宽度控制这阴影横向的位移,高度控制着纵向的位移。shadowOffset的默认值是 {0, -3},意即阴影相对于Y轴有3个点的向上位移。

    4、shadowRadius属性控制着阴影的模糊度,当它的值是0的时候,阴影就和视图一样有一个非常确定的边界线。当值越来越大的时候,边界线看上去就会越来越模糊和自然。

    相关文章

      网友评论

          本文标题:视图的图层

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