Hatena::ブログ(Diary)

Over&Out その後 このページをアンテナに追加 RSSフィード Twitter

2012-11-24

CALayer を用いた「影」の描画処理を軽くする

CALayerを用いてUIViewを継承したクラスに影をつける方法は、下記のような感じで(CoreGraphicsで描画する方法などと比べて)わかりやすくお手軽で、質感もグッと増すので、ついつい多用したくなります。


self.layer.shadowOpacity = 0.5;
self.layer.shadowRadius = 2.0;
self.layer.shadowOffset = CGSizeMake(0.0, 0.0);

ただ、影とか透過とかの処理はなかなか重いらしく、例えば UITableViewCell に置いた背景用画像に影をつけると、iPhone4ぐらいでも完全に体感できるぐらいに遅くなってしまいます。


で、このコードに下記の3行を付け加えてやると、体感でわかるぐらいに改善されます。


self.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.bounds].CGPath;
self.layer.shouldRasterize = YES;
self.layer.rasterizationScale = [UIScreen mainScreen].scale;

shadowPath で、影をつける矩形のパスをあらかじめ与えてやり、shouldRasterize を YES にして rasterizationScale をセットしてやることで、ビットマップとしてプリレンダリングされるらしいです。

(※本家ドキュメント未確認です)


(参考ページ)

http://stackoverflow.com/questions/8333736/uitableview-lagging-due-to-shadows-and-borders



スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

2009 | 08 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 |