web-dev-qa-db-ja.com

clipsToBoundsはどのように機能しますか?

UIViewプロパティclipsToBoundsの使用方法を知りたい。

公式文書には次のように書かれています:

clipsToBoundsproperty

サブビューをビューの境界に制限するかどうかを決定するブール値。

ディスカッション
この値をYESに設定すると、サブビューがレシーバーの境界にクリップされます。 NOに設定すると、フレームがレシーバーの表示範囲を超えるサブビューはクリップされません。デフォルト値はNOです。

しかし、これが正確に何を意味するのかはわかりません。 clipsToBoundsの使用方法このプロパティをYESに正確に設定すると、どのような結果になりますか?またはNOに?

97
Tosh

スーパービューが両側に10単位のボックスであり、サブビューの幅が20ユニットで、clipsToBoundsYESに設定されている場合、境界内に収まるサブビューの部分のみが表示されます。スーパービューの。そうでない場合、clipsToBoundsNOに設定されていると、スーパービューの外側の部分も含めて、サブビュー全体が表示されます(まだ画面にいると仮定します)。

視覚的な例として、ストーリーボードに設定された次のビューを検討してください。

enter image description here

これは白いUIViewで、左上隅に単純な「1」または「2」のラベルが付いているので、これらをview1またはview2として説明できます。さらに、黒いビューは白いビューと同じサイズですが、原点は白いビューの中心にあります。

View ControllerのviewDidLoadメソッドには、次のコードがあります。

Objective-C:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view1.clipsToBounds = YES;
    self.view2.clipsToBounds = NO;
}

迅速:

override func viewDidLoad() {
    super.viewDidLoad()
    self.view1.clipsToBounds = true
    self.view2.clipsToBounds = false
}

コードを実行してシミュレーターまたはデバイスで見ると、次の結果が得られます。

enter image description here

したがって、これらのビューは同じように設定されていますが(clipsToBoundsを除く)、見た目は異なります。これがclipsToBoundsが行うことです。 YESに設定すると上位の結果が得られ、NOに設定すると下位の結果が得られます。

ビュー階層をデバッグすると、ブラックボックスが実際に白いビューの境界を超えて広がっていることがより明確にわかりますが、アプリが実際に実行されている場合、ビュー2のみがこれを示します。

enter image description here

255
nhgrif

uiviewと影付きのテキストフィールドSwift 4

self.txtCurrent.layer.shadowOpacity = 0.5
self.txtCurrent.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)          
self.txtCurrent.layer.shadowRadius = 5.0
self.txtCurrent.layer.shadowColor = UIColor.black.cgColor
self.txtCurrent.layer.masksToBounds = false

影付きのuiview

self.yourview.layer.shadowOpacity = 0.5
self.yourview.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
self.yourview.layer.shadowRadius = 5.0
self.yourview.layer.shadowColor = UIColor.black.cgColor
self.yourview.layer.masksToBounds = false
0
Shakeel Ahmed