開發記錄

馬萬旻發表於2018-08-12

記性不好,記錄下開發中遇到的問題和解決方案。

如果有更好的解決方式或者發現我的任何錯誤,希望能夠指出來,互相學習,共同進步。先謝過了~

  1. 使用貝塞爾曲線繪圖的時候,發現並沒有按照設定的軌跡繪製圖層,只出現了一個小圓點。
    分析: 當時放置繪製view的父檢視使用的佈局方式是autolayout,而貝塞爾曲線的資料計算方式使用了frame。由於在繪製曲線的時候,還不能獲取到真正的frame,所以造成了這個問題。(再次因為混血使用跳坑。。。)
    解決: 在layoutSubviews中有佈局後正確的frame,將貝塞爾曲線的繪製相關方法轉到這個方法中實現即可。

  2. 在某列表中需要使用多個標籤(UILabel),而且沒個標籤都有圓角,大量設定layer.masksToBounds = YES之後,頁面會明顯示卡頓。
    分析: 在iOS9之前,這種切割圓角的方式會觸發離屏渲染,iOS 9.0 之後UIButton設定圓角會觸發離屏渲染,而UIImageView裡png圖片設定圓角不會觸發離屏渲染了,如果設定其他陰影效果之類的還是會觸發離屏渲染的。根據測試的效果來看,UILabel切割圓角應該也是觸發了離屏渲染的。
    解決:

    • cornerRadius屬性:它是影響layer顯示的backgroundColor和border,對layer的contents不起作用。
    • 對於不需要設定label的backgroundColor,只設定borderWidth、borderColor,直接設定cornerRadius,不需要設定masksToBounds = YES,就可以實現圓角功能。
    • 對於需要同時設定label的backgroundColor時,直接設定cornerRadius是不能正常顯示圓角的,原因是:UILabel設定backgroundColor的行為,不再是設定layer的背景色而是為contents設定背景色。所以解決方式是我們不去設定label的backgroundColor,而是直接設定label.layer.backgroundColor,這樣就可以實現單獨設定cornerRadius,顯示圓角的效果。

相關文章