iOS-設定視圖圓角樣式流暢解決方案
代碼
//設定圓角視圖樣式-(void)setUpSelfView{ //陰影 Shadow self.layer.shadowColor = [UIColor blackColor].CGColor; //黑 self.layer.shadowOpacity = 0.33;//陰影的不透明度 self.layer.shadowOffset = CGSizeMake(0, 1.5);//陰影的位移 self.layer.shadowRadius = 4.0;//陰影半徑 self.layer.shouldRasterize = YES; //圓角緩衝 self.layer.rasterizationScale = [UIScreen mainScreen].scale;//提高流暢度 //圓角 self.layer.cornerRadius = 10.0f;}
相關說明:
環境切換
環境切換,不管是在GPU渲染過程中,還是一直所熟悉的進程切換,環境切換在哪裡都是一個相當耗時的操作。首先我要儲存當前螢幕渲染環境,然後切換到一個新的繪製環境,申請繪製資源,初始化環境,然後開始一個繪製,繪製完畢後銷毀這個繪製環境,如需要切換到On-Screen Rendering或者再開始一個新的離屏渲染重複之前的操作。 描述了一次mask的渲染操作。
self.layer.shouldRasterize = YES; self.layer.rasterizationScale = [UIScreen mainScreen].scale;
這樣大部分情況下可以馬上挽救你的幀數在55幀每秒以上。shouldRasterize = YES會使視圖渲染內容被緩衝起來,下次繪製的時候可以直接顯示緩衝,當然要在視圖內容不改變的情況下。
除了上面非要作死的人外,大家還是採取預先產生圓角圖片,並緩衝起來這個方法才是比較好的手段。預先處理圓角圖片可以在幕後處理,處理完畢後緩衝起來,再在主線程顯示,這就避免了不必要的離屏渲染了。
另外也有在圖片上面覆蓋一個鏤空圓形圖片的方法可以實現圓形頭像效果,這個也是極為高效的方法。缺點就是對視圖的背景有要求,單色背景效果就最為理想。
總結
實現圓角cornerRadius要比mask高效很多。
Rasterize在大部分情況下極大減少GPU工作。在有空間的情況下,大部分情況下緩衝總能幫到你,不是嗎?
後台預先處理圖片也能很簡單幫上你很大的忙。