3

では、サイズが 200x200viewDidLoadの at 100,100 を作成し、その境界を -100,-100 の原点を持つように変更します。UIViewこれにより、ビュー全体が左上に戻るか、フレームと境界の交点に小さな長方形のみが描画されると想定していました。引き込まれた領域にはまったく影響しませんでした。

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect rect = CGRectMake(100, 100, 200, 200);
    greenView = [[UIView alloc] initWithFrame:rect];
    [greenView setBackgroundColor:[UIColor greenColor]];

    CGRect bounds = CGRectMake(-100, -100, 200, 200);
    [greenView setBounds:bounds];
    [greenView setClipsToBounds:YES];
    [greenView setContentMode:UIViewContentModeRedraw];

    [self.view addSubview:greenView];
}

フレームと境界は次のように記録されます。

Frame: {{100, 100}, {200, 200}}
Bounds: {{-100, -100}, {200, 200}}

ビューはその境界矩形にのみ描画されると思いました。ビューと境界について何が欠けていますか? ビューの境界を変更しても、描画される場所が変更されないのはなぜですか?

外観は次のとおりです。

ここに画像の説明を入力

4

2 に答える 2

2

Maddy が提案したように、あなたのユースケースでは、frame. 舞台裏で何が起こっているかは次のとおりです。

フレームを変更することは、ビューを変更することに似bounds centerいます。したがって、 を使用する場合はbounds、 も変更してcenterください。ビューが回転する可能性があるため、の は必ずしも境界と同じではないsizeことに注意してください。framesize of the

したがって、「ビューはその境界矩形にのみ描画されると思いました。 」というあなたの声明は、少なくとも正確ではありません。{200,200}ビューを 45 度回転させても のboundsままですが{200,200}、幅と高さの両方frame.sizeになります。200 * sqrt(2)はビュー自体の座標系boundsを参照し、はスーパービューの座標系を参照します。frame

于 2013-11-04T16:18:10.453 に答える
0

ムンディが言ったことですが、追加したいのですが、なぜ境界が存在するのか考えたことがあるなら、スクロールするときにそれは非常に理にかなっています. NSClipViewのNSScrollView の境界は、表示される NSScrollView のドキュメント ビューの一部です。したがって、スクロールすると scrollView.contentView.bounds が変更されますが、scrollView.contentView.frameは明らかに変更されません。

于 2013-11-04T16:47:09.527 に答える