iOS中无卡顿同时使用圆角、阴影和边框的实现

这篇文章主要介绍iOS中无卡顿同时使用圆角、阴影和边框的实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

在 iOS 开发中,最怕看到设计稿里圆角、阴影和边框同时出现,这三兄弟简直就是性能杀手。

优化的方法百度一下有很多,虽然方法不同但是原理都一样。

分享一个我自己一直使用的方法:在一个 View 里只应用一种效果,然后通过组合的方式达到效果。

overrideinit(frame:CGRect){
super.init(frame:frame)

imageView=UIImageView(image:UIImage(named:"img"))
imageView.layer.cornerRadius=14
imageView.layer.masksToBounds=true
backgroundView=imageView

shadowView=ShadowView()
shadowView.layer.cornerRadius=20
shadowView.applyShadow(.black,CGSize(width:0,height:15),0.2,40)
insertSubview(shadowView,belowSubview:imageView)

contentView.layer.cornerRadius=14
contentView.layer.borderWidth=1
contentView.layer.borderColor=UIColor.orange.cgColor
contentView.layer.masksToBounds=true
}

iOS中无卡顿同时使用圆角、阴影和边框的实现

层次结构:

  • contentView: 描绘边框,放在最上层。

  • imageView: 显示圆角,放在中间,用于背景图。

  • shadowView: 显示阴影,放在最底层。代码很简单,只是封装了一下阴影参数:

classShadowView:UIView{
privatevarshadowColor:UIColor?
privatevarshadowOpacity:CGFloat=1
privatevarshadowOffset:CGSize=CGSize(width:0,height:3)
privatevarshadowBlur:CGFloat=6

overridefunclayoutSubviews(){
super.layoutSubviews()

updateShadow()
}

funcapplyShadow(_color:UIColor?,_offset:CGSize,_opacity:CGFloat,_blur:CGFloat){
shadowColor=color
shadowOffset=offset
shadowOpacity=opacity
shadowBlur=blur

updateShadow()
}

privatefuncupdateShadow(){
layer.shadowColor=shadowColor?.cgColor
layer.shadowOffset=shadowOffset
layer.shadowOpacity=Float(shadowOpacity)
layer.shadowRadius=shadowBlur*0.5
layer.shadowPath=UIBezierPath(roundedRect:self.bounds,cornerRadius:layer.cornerRadius).cgPath
}
}

分开单独绘制速度很快,使用 UICollectionView 进行滚动测试,生成的 Cell 数量是 1 万个。

测试机器是 5s + iOS 12.4.4,快速滑动无任何卡顿。

以上是“iOS中无卡顿同时使用圆角、阴影和边框的实现”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-05-30 14:06:08
收藏
分享
海报
0 条评论
181
上一篇:Nodejs +Websocket如何实现指定发送及群聊 下一篇:pytorch:怎么实现简单的GAN
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码