masksToBoundsでもマスクできる!
あー、CALayerクラスにmasksToBoundsなんて便利なプロパティがあったのねぇというお話です。
次のコードはUILabelオブジェクトがUIViewオブジェクトに乗っているというよくあるシンプルなものです :

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

おー、枠外のは表示されませんやん!
まるでマスクやん!(ってそういうプロパティ名だけどね)
このプロパティを知らなかったので、同様のことを実現するのにわざわざマスクしてましたもん。
しかも驚くことに、このmasksToBoundsを使う方法だとコード内でスクリーンショットを撮影する時に使う renderInContext: メソッドで無視されないのです!
参考:renderInContext:メソッドはマスクを無視する
あぁ、もっと早くこの方法を知っていればよかったのに!
次のコードは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.";実行結果はこんな風になるはずです :

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

おー、枠外のは表示されませんやん!
まるでマスクやん!(ってそういうプロパティ名だけどね)
このプロパティを知らなかったので、同様のことを実現するのにわざわざマスクしてましたもん。
しかも驚くことに、このmasksToBoundsを使う方法だとコード内でスクリーンショットを撮影する時に使う renderInContext: メソッドで無視されないのです!
参考:renderInContext:メソッドはマスクを無視する
あぁ、もっと早くこの方法を知っていればよかったのに!
スポンサーサイト
<< iPod touchにiOS 5を入れてみた TopPage textView: shouldChangeTextInRange: replacementText: 内で新しい文字列を作る >>
トラックバック
トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/500-2c94aa42
https://ringsbell.blog.fc2.com/tb.php/500-2c94aa42