圆角 给view设置圆角,只需要设置view的layer属性的conrnerRadius,它表示图层角的曲率,默认值是0 圆角还可以用贝塞尔曲线来切,这样还可以实现单切某一个角,其它角不切的效果,我的...属性为YES 时,阴影就会被裁剪掉 圆角+阴影 从上面我们可以得出,因为对裁剪属性不同需求,在一个view上,圆角和阴影一般是不可并存的,那么我们需要怎么办呢?...阴影是通过里面的飞机来计算 所以,我们圆角加阴影的实现方案就出来了,我们可以用两个视图来实现,一个只画阴影的空的外图层,和一个经过裁剪的内图层,这样外图层的阴影会根据裁剪过后的内图层来计算,这样看起来就即有阴影又有圆角了...上代码 因为圆角、边框、阴影每个效果的设置都需要设置2~4个属性,再加上它们可以两两组合,如果用方法传不同参数来写的化,只方法名都要写半天,所以我机智的用了链式编程的思想来写了一个分类,下面来看一下...// 圆角+边框+阴影 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)]; view.backgroundColor
对象,可以很方便地调整UIView的一些外观属性,例如可以给UIView设置阴影,圆角,边框等等... 2....操作layer改变UIView外观. 2.1 设置阴影 //默认图层是有阴影的, 只不过是透明的。...操作layer改变UIImageView的外观. 3.1 设置阴影 //UIView本身就自带阴影效果,它是透明....当中Image并不是直接添加在根层上面的.而是添加在layer当中的contents层里....自定义CALayer. #### 2.1 如何自定义Layer. 自定义CALayer的方式创建UIView的方式非常相似.
我们可以通过操作CALayer对象,可以很方便地调整UIView的一些外观属性,可以给UIView设置阴影,圆角,边框等等... 2、如何操作layer改变UIView外观? ...2.1 设置阴影 //默认图层是有阴影的, 只不过,是透明的 _RedView.layer.shadowOpacity = 1; //设置阴影的圆角 _RedView.layer.shadowRadius...= 50; 3、如何操作layer改变UIImageView的外观? ...,先去调用drawRect方法,将要绘制的东西绘制到图层上,然后拷贝图层,完成了UIView的显示 UIView只有交互的功能,没有显示的功能 CALayer只要显示的功能,没有交互的功能 UIView...可以做一些简单的动画,例如:平移,拉伸,旋转 一些比较高端的动画,都是直接操作CALayer的,可以制作3D动画 使用CALayer,可以直接操作显示的东西,例如阴影,圆角,边框等 所以,对比CALayer
.当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView得显示.换句话说,UIView...= 1.0; 设置阴影半径 self.demoView.layer.shadowRadius = 10; 设置圆角效果,圆角矩形,layer剪裁 设置圆角半径 redView.layer.cornerRadius...,但是这样会导致阴影效果没有,可以再添加一个SubLayer,添加阴影。...此处可以和UIView的clipToBounds来比较记忆(clipToBounds为yes会使其上的内容包括子视图不能超出边界) 控件截图裁剪的三种方法: 给layer设置圆角半径layer.cornerRadius...Core Foundation 中的数据类型转换成 Foundation 中的类型, 桥接的时候也会设置到一些所有权的转换等。
本片文章前三章内容大家比较常用,后面的可能会不那么常用,前面的基础内容不想看了可以直接从第4段开始 圆角 conrnerRadius 这个功能还是很常见的,本来不想记了,为了整个系列的完整性,还是啰嗦一下...CALayer有一个conrnerRadius的属性控制图层的圆角曲率,默认值为0。这个曲率值默认只影响背景颜色而不影响背景图片或者子图层。可以用过下面的示例看一下。...之前有个UI需求,同时设置阴影和圆角,圆角简单的使用layer.cornerRadius和maskToBounds。...下面我们用圆角下面的那个demo稍作修改做个示例: 首先对rightView做一个透明色的shadowView的包裹,用来设置阴影: ?...= 0.8f; self.leftView.layer.shadowRadius = 5.f; // 给 shadowView 添加和 leftview 一样的阴影效果 self.shadowView.layer.shadowOffset
iOS动画开发之四——核心动画编程(CoreAnimation) 一、引言 前几篇博客详细介绍了有关UIView层的动画使用与相关的效果,然而这些动画是UIKit为我们封装好的核心动画层的方法...他确实可以做很多view做不了的事情. (1)设置view的圆角属性 view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100... view.layer.cornerRadius=10;//设置layer层的圆角半径 效果如下: ?...(3)设置视图阴影 view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview... layer.shadowRadius=10;//设置阴影圆角 效果如下: ?
,比如添加圆角、添加阴影的偏移、添加边框等。...但这些都是layer才有的属性,并没有提供给UIView,所以我在Attributes Inspector里面是没有办法设置的,并且,这里也不能设置边框颜色和阴影颜色,因为边框颜色和阴影颜色是CGColor...然后在RadiusView.h文件里面,我们可以随便自定义变量名,比如,圆角、边框宽度、边框颜色、阴影颜色、阴影偏移offset,然后把IBInspectable直接放到变量前面。...这里需要注意的是,我设置圆角的时候,还要把 clipsToBounds 设为yes,防止我忘记在Attributes Inspector里面进行勾选,再来运行,就没有问题了(如下图),这里我没有实现阴影的设置...,因为设置了也不会生效,由于clipsToBounds,所以阴影和圆角是不能同时设置的,这里有很多的解决方案,我就不多说了。
前提 圆角和阴影无法共存的原因就是因为这句代码。...Because shadow is an effect done outside the View, and that masksToBounds set to YES will tell the UIView...这句话的意思就是,圆角都是我给你割出来的,圆角外面的阴影自然也割掉了~ 所以,这么看来,圆角与阴影不能并存啊(仅限这种圆角实现的方式) 处理方式 在下面再加一个subView负责处理圆角,而父类view...=NO cornerRadius等于subView的大小 suvBiew的masksToBounds=YES 添加一个上层Layer: CALayer *subLayer=[CALayer layer...subLayer.shadowOpacity = 0.8;//阴影透明度,默认0 subLayer.shadowRadius = 4;//阴影半径,默认3 [self.bkgView.layer
这里有一些UIView没有暴露出来的CALayer的功能: 阴影,圆角,带颜色的边框 3D变换 非矩形范围 透明遮罩 多级非线性动画 这篇主要说阴影圆角边框,先看一下Demo效果: ?...viewDidLoad]; [self layerCornerRadiusAndWidth]; [self shadowEffect]; [self shadowPath]; } //layer的圆角...它是一个CGSize的值,宽度控制这阴影横向的位移,高度控制着纵向的位移。...self.shadowView.layer.shadowOffset = CGSizeMake(1, 1); //shadowRadius属性控制着阴影的模糊度,当它的值是0的时候,阴影就和视图一样有一个非常确定的边界线...当值越来越大的时候,边界线看上去就会越来越模糊和自然。苹果自家的应用设计更偏向于自然的阴影,所以一个非零值再合适不过了。
retain) CALayer *layer; 4)、当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了...UIView的显示。...UIView本身不具备显示的功能,是它内部的层才有显示功能 5)、通过CALayer对象,可以很方便的调整UIView的一些外观属性,比如:阴影、圆角大小、边框宽度和颜色。。。...: 默认为YES, 代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。...动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧 path: 可以设置一个CGPathRef、CGMutablePathRef, 让图层按照路径轨迹移动。
,并添加发光的阴影 ?...= CGSizeMake(kAdjustRatio(0), kAdjustRatio(0));//设置阴影的偏移量,阴影的大小,x往右和y往下是正 tmpView.layer.shadowRadius...= kAdjustRatio(5);//设置阴影的圆角,//阴影的扩散范围,相当于blur radius,也是shadow的渐变距离,从外围开始,往里渐变shadowRadius距离 //...setShadowImage:[UIImage createImageWithColor:[UIColor clearColor]]]; } II 、给视图底部添加发光的阴影 2.1 效果...,阴影的大小,x往右和y往下是正 tmpView.layer.shadowRadius = kAdjustRatio(5);//设置阴影的圆角,//阴影的扩散范围,相当于blur radius,
当在操作 UI 时,比如改变了 Frame、更新了 UIView/CALayer 的层次时,或者手动调用了 UIView/CALayer 的 setNeedsLayout/setNeedsDisplay...方法后,这个 UIView/CALayer 就被标记为待处理,并被提交到一个全局的容器去。...UI优化方案: 1 性能敏感界面,少用Storyboard 2 对象尽可能复用,减少对象创建,释放的次数 3 对view应该尽量减少不必要的属性修改。应该尽量避免调整视图层次、添加和移除视图。...8 CALayer 的 border、圆角、阴影、遮罩(mask),CASharpLayer 的矢量图形显示,通常会触发离屏渲染(offscreen rendering),而离屏渲染通常发生在 GPU...避免使用圆角、阴影、遮罩等属性。
iOS开发CoreAnimation解读之二——对CALayer的分析 一、UIView中的CALayer属性 1.Layer专门负责view的视图渲染 每一个UIView的对象中都有一个...layer - (nullable CALayer *)hitTest:(CGPoint)p; //返回layer的bounds内是否包含某一点 - (BOOL)containsPoint:(CGPoint...@property(nullable) CGColorRef shadowColor; //设置阴影透明度 @property float shadowOpacity; //设置阴影偏移量 @property... CGSize shadowOffset; //设置阴影圆角半径 @property CGFloat shadowRadius; //设置阴影路径 @property(nullable) CGPathRef... shadowPath; //添加一个动画对象 key值起到id的作用,通过key值,可以取到这个动画对象 - (void)addAnimation:(CAAnimation *)anim forKey
; 使用UIView的图层为例 UIView本身仅仅有一个图层,主图层 self.testView.layer.borderWidth = 10;//设置边框大小 self.testView.layer.borderColor...= [UIColor blueColor].CGColor;//设置边框颜色 self.testView.layer.cornerRadius = 10;//设置view的圆角 self.testView.layer.shadowOffset...= CGSizeMake(10, 10);//设置阴影。...后面是阴影偏差(阴影会向哪个方向偏)右下角全正数 self.testView.layer.shadowColor = [UIColor blackColor].CGColor;//给阴影设置颜色...阴影不显示也是这个原因 UIImageView为例圆角实现 UIImageView控件不止一个图层。图片的显示不是在主层中,所以更改主层的边角为原型。
2.1 效果 2.2 添加发光的阴影的代码实现 3.1 避免selectedViewController视图被TabBar挡住 3.2 iOS 13适配深色模式【设置UITabBarItem上title...,并添加发光的阴影 ?...= kAdjustRatio(5);//设置阴影的圆角,//阴影的扩散范围,相当于blur radius,也是shadow的渐变距离,从外围开始,往里渐变shadowRadius距离 //...setShadowImage:[UIImage createImageWithColor:[UIColor clearColor]]]; } II 、给视图底部添加发光的阴影 2.1 效果...在这里插入图片描述 2.2 添加发光的阴影的代码实现 ShadowView
那么 CALayer 究竟是如何进行管理的呢?另外在 iOS 开发过程中,最大量使用的视图控件实际上是 UIView 而不是 CALayer,那么他们两者的关系到底如何呢?...部分效果的设置:因为 UIView 只对 CALayer 的部分功能进行了封装,而另一部分如圆角、阴影、边框等特效都需要通过调用 layer 属性来设置。...圆角、阴影、组透明度等会由系统自动触发离屏渲染,那么打开光栅化可以节约第二次及以后的渲染时间。...,缓存内容 100ms 内如果没有被使用,那么就会被丢弃,无法进行复用 离屏渲染缓存空间有限,超过 2.5 倍屏幕像素大小的话也会失效,无法复用 圆角的离屏渲染 通常来讲,设置了 layer 的圆角效果之后...【UIBezierPath】用贝塞尔曲线绘制闭合带圆角的矩形,在上下文中设置只有内部可见,再将不带圆角的 layer 渲染成图片,添加到贝塞尔矩形中。
对此你在应用中,应该尽量减少不必要的属性修改。 当视图层次调整时,UIView、CALayer 之间会出现很多方法调用与通知,所以在优化性能时,应该尽量避免调整视图层次、添加和移除视图。...图形的生成 CALayer 的 border、圆角、阴影、遮罩(mask),CASharpLayer 的矢量图形显示,通常会触发离屏渲染(offscreen rendering),而离屏渲染通常发生在...对于只需要圆角的某些场合,也可以用一张已经绘制好的圆角图片覆盖到原本视图上面来模拟相同的视觉效果。最彻底的解决办法,就是把需要显示的图形在后台线程绘制为图片,避免使用圆角、阴影、遮罩等属性。...(- -太吊了)在显示简单的单张图片时,利用 UIView.layer.contents 就足够了,没必要使用 UIImageView 带来额外的资源消耗,为此我在 CALayer 上添加了 setImageWithURL...再进一步减少每个 Cell 内图层的数量,用 CALayer 替换掉 UIView。
作用机制 当UIView需要显示的时候,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上(CALayer上),系统将图层拷贝到屏幕上,完成UIView的显示。...通过操作这个CALayer对象,可以很方便的调整UIView的一些界面属性,比如:阴影,圆角大小,旋转等等。...UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。 UIView和CALayer是相互依赖的关系。...UIView依赖与CALayer提供的内容,CALayer依赖UIView提供的容器来显示绘制的内容。...归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。
这篇短文中,我们将探讨CALayer类,以及如何运用它来创建圆形图像或圆角图像。 您可能并没有听说过CALayer类。但是,如果你曾经创建过应用程序,那么你应该以某种方式使用过它。...UIKit中的每个视图(例如UIView、UIImageView)都备份在一个CALayer类的实例中(即layer对象)。layer对象用来管理视图的备份存储和处理视图相关的动画。...layer对象提供了多种属性,使用它们来控制视图的可视内容: 背景颜色 边框和边框宽度 阴影颜色,宽度等 Opacity(不透明度) 圆角半径 Corner radius就是我们用来绘制圆角和圆形图像的属性...创建圆形用户头像 接下来,让我们看看如何通过改变圆角半径,使用户头像转换成一个圆形图像。...添加边框 接下来,我们给头像添加边框使它更漂亮点。同样,也只需要两行。
CALayer *layer; 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView...@property CGFloat| cornerRadius;|圆角 @property CGRect |bounds;| Layer的大小 @property CGPoint |position...设置position,就和设置UIView的center一样的。 记得要添加到父CALayer上。..._4, 10, 20, 30); 这段代码的意思就是说从{0,0,0}这个点,到{10,20,30}这个点,划一根线。...m34的默认值是0,可以通过设置m34为-1.0 / d来应用透视效果 d代表了想象中视角相机和屏幕之间的距离,以像素为单位,那应该如何计算这个距离呢?实际上并不需要,大概估算一个就好了。”
领取专属 10元无门槛券
手把手带您无忧上云