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