国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS 無(wú)卡頓同時(shí)使用圓角、陰影和邊框的實(shí)現(xiàn)

2020-07-26 02:18:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在 iOS 開(kāi)發(fā)中,最怕看到設(shè)計(jì)稿里圓角、陰影和邊框同時(shí)出現(xiàn),這三兄弟簡(jiǎn)直就是性能殺手。

優(yōu)化的方法百度一下有很多,雖然方法不同但是原理都一樣。

分享一個(gè)我自己一直使用的方法:在一個(gè) View 里只應(yīng)用一種效果,然后通過(guò)組合的方式達(dá)到效果。

override init(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}

層次結(jié)構(gòu):

  • contentView: 描繪邊框,放在最上層。
  • imageView: 顯示圓角,放在中間,用于背景圖。
  • shadowView: 顯示陰影,放在最底層。代碼很簡(jiǎn)單,只是封裝了一下陰影參數(shù):
class ShadowView: UIView {  private var shadowColor: UIColor?  private var shadowOpacity: CGFloat = 1  private var shadowOffset: CGSize = CGSize(width: 0, height: 3)  private var shadowBlur: CGFloat = 6  override func layoutSubviews() {    super.layoutSubviews()    updateShadow()  }  func applyShadow(_ color: UIColor?, _ offset: CGSize, _ opacity: CGFloat, _ blur: CGFloat) {    shadowColor = color    shadowOffset = offset    shadowOpacity = opacity    shadowBlur = blur    updateShadow()  }  private func updateShadow() {    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  }}

分開(kāi)單獨(dú)繪制速度很快,使用 UICollectionView 進(jìn)行滾動(dòng)測(cè)試,生成的 Cell 數(shù)量是 1 萬(wàn)個(gè)。

測(cè)試機(jī)器是 5s + iOS 12.4.4,快速滑動(dòng)無(wú)任何卡頓。

給一個(gè)測(cè)試 demo 大家體驗(yàn)一下:

Github: shadow_view_demo

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 栾川县| 鄂托克旗| 绥宁县| 台东市| 安化县| 公安县| 剑川县| 沂南县| 鄂伦春自治旗| 北宁市| 渑池县| 兖州市| 沧源| 东宁县| 星子县| 大安市| 康马县| 甘孜县| 古浪县| 壤塘县| 辽阳市| 利川市| 库伦旗| 区。| 承德县| 石棉县| 东宁县| 长乐市| 噶尔县| 平陆县| 津市市| 无棣县| 通许县| 大竹县| 南皮县| 贵南县| 美姑县| 扎赉特旗| 遵义市| 邢台县| 理塘县|