UIView
があり、次の方法で境界線を定義しています。
self.layer.borderColor = [UIColor blackColor].CGColor;
self.layer.borderWidth = 3;
このUIView
にサブビューを添付し、サブビューを境界線上に移動すると、その下に移動します。これは意図された動作ですか?サブビューをその上に配置する方法はありますか?
Apple仕様 によると:It is composited above the receiver’s contents and sublayers.
そのため、サブビューを前面に表示した場合でも、境界線は常にすべてのサブビューの上になります。
だから私は境界線を偽造するために背景ビューを作成します。
例えば。:
UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
backgroundView.backgroundColor = [UIColor blackColor];
backgroundView.clipsToBounds = NO;
UIView *bView = [[UIView alloc] initWithFrame:CGRectInset(backgroundView.bounds, 3, 3)];
bView.backgroundColor = [UIColor redColor];
UIView *cView = [[UIView alloc] initWithFrame:CGRectMake(-50, -50, 100, 100)];
cView.backgroundColor = [UIColor yellowColor];
[bView addSubview:cView];
[backgroundView addSubview:bView];
[self.window addSubview:backgroundView];
と効果:
ビューの構造によっては、メインビューの親にサブビューを追加する方が簡単な場合があります。その後、メインビューとオーバーラップし、要求に応じて境界線をオーバーレイします。
自分に合った特定の位置にレイヤーを挿入します:
self.layer.insertSublayer(sublayer, at: 0)
スーパービューの「clipsToBounds」プロパティを「はい」に設定してみましたか?これはパフォーマンス上の理由からデフォルトでNOに設定されていますが、yesに設定すると、探している効果が得られる場合があります。