iOS使用shouldRasterize優化效能
阿新 • • 發佈:2019-01-14
/* When true, the layer is rendered as a bitmap in its local coordinate * space ("rasterized"), then the bitmap is composited into the * destination (with the minificationFilter and magnificationFilter * properties of the layer applied if the bitmap needs scaling). * Rasterization occurs after the layer's filters and shadow effects * are applied, but before the opacity modulation. As an implementation * detail the rendering engine may attempt to cache and reuse the * bitmap from one frame to the next. (Whether it does or not will have * no affect on the rendered output.) * * When false the layer is composited directly into the destination * whenever possible (however, certain features of the compositing * model may force rasterization, e.g. adding filters). * * Defaults to NO. Animatable. */ @property BOOL shouldRasterize; /* The scale at which the layer will be rasterized (when the * shouldRasterize property has been set to YES) relative to the * coordinate space of the layer. Defaults to one. Animatable. */ @property CGFloat rasterizationScale;
如果在滾動tableView/collectionView時,每次都在cell中執行圓角設定,肯定會阻塞 UI,設定這個將會使滑動更加流暢。
當 shouldRasterize(光柵化)設成 true 時,layer被渲染成一個 bitmap,並快取起來,等下次使用時不會再重新去渲染了。
實現圓角本身就是在做顏色混合(blending),如果每次頁面出來時都blending,消耗太大,這時layer.shouldRasterize = YES,下次就只是簡單的從渲染引擎的 cache 裡讀取那張 bitmap,節約系統資源。