頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


masksToBoundsでもマスクできる!

あー、CALayerクラスにmasksToBoundsなんて便利なプロパティがあったのねぇというお話です。

次のコードはUILabelオブジェクトがUIViewオブジェクトに乗っているというよくあるシンプルなものです :
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 150, 150)];
view.backgroundColor = [UIColor colorWithWhite:0.9f alpha:1.f];
[self.view addSubview:view];
[view release];
    
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 30)];
label.backgroundColor = [UIColor clearColor];
[view addSubview:label];
[label release];
label.text = @"Stay Hungry. Stay Foolish.";
実行結果はこんな風になるはずです :

masksToBoundsを使わない場合

今まで深く考えなかったのですが、UIViewオブジェクトのフレームの外でもそれに乗ってるオブジェクト(ここではUILabelオブジェクト)は表示されてます。
ところがこれに、次の一行を足します :
view.layer.masksToBounds = YES;
すると先ほどのと異なり、、、 :

masksToBoundsを使った場合

おー、枠外のは表示されませんやん!
まるでマスクやん!(ってそういうプロパティ名だけどね)
このプロパティを知らなかったので、同様のことを実現するのにわざわざマスクしてましたもん。
しかも驚くことに、このmasksToBoundsを使う方法だとコード内でスクリーンショットを撮影する時に使う renderInContext: メソッドで無視されないのです!

参考:renderInContext:メソッドはマスクを無視する

あぁ、もっと早くこの方法を知っていればよかったのに!
スポンサーサイト




<< iPod touchにiOS 5を入れてみた  TopPage  textView: shouldChangeTextInRange: replacementText: 内で新しい文字列を作る >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/500-2c94aa42




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.