这篇文章主要介绍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
}
层次结构:
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中无卡顿同时使用圆角、阴影和边框的实现”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!