備忘録

開発でつまったところの備忘録.不定期に更新します.

UIView,UILabelなどに角丸・ドロップシャドウ効果をつける方法

まず、一般にサブクラス化せずに見た目をいじる方法は

#import<QuantzCore/QuantzCore.h>

としてQuantzライブラリをインポートし

view.layerまたは[label layer]のプロパティをいじります。

 

http://www.yoheim.net/blog.php?q=20130209

にいろいろ書いてあります

 

calayerについては

http://www.raywenderlich.com/ja/26222/%E9%96%8B%E7%99%BA%E5%88%9D%E5%BF%83%E8%80%85%E3%81%AE%E7%82%BA%E3%81%AEcalayer%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB

を参照

 

 

しかし、この通りにlayerを角丸にして

layer.maskToBounds=YES;

または

label.clipToBounds=YES;

などでlayerでクリップしてUIView,UILabelを角丸にすると、ドロップシャドウまでクリップされてしまいます。

 

なので、両方を同時にしたいときは

layer.maskToBounds=NO;

として、

label.backgroundcolorを透明にしてlayerの外見をそのまま使います。

これで角丸にドロップシャドウをつけることができます。

 

余談ですが、このようにサブクラス化せずにlayerをいじるのは

http://atmarkplant-dj.blogspot.jp/2012/10/ios-view.html

に書いてあるようにかなり処理が重くかくつきます。

 

なので時間があればサブクラス化してdrawrectに今の処理を書くのが良いでしょう。