在viewDidLoad
中,我创建一个{100}的UIView
,大小为200x200,然后将其边界更改为-100,-100的原点。我原本以为这会将整个视图移回左上角,或者只为框架和边界的交叉点绘制一个较小的矩形。它根本不影响绘制区域。
- (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}}
我认为一个视图只会吸引它的界限。我对观点和界限缺少什么?为什么不改变我的视图边界会改变它绘制的位置?
这是它的样子:
答案 0 :(得分:2)
根据Maddy的建议,对于您的用例,您只需更改frame
即可。以下是幕后发生的事情:
更改框架就像更改视图的bounds
和 center
一样。因此,如果您想使用bounds
,也请更改center
。请注意,size
的{{1}}不一定与frame
边界相同,因为视图可能会被轮换。
因此,你的陈述“我认为一个视图只会引入它的界限。”如果不是不正确,至少不够精确。如果您将size of the
视图旋转45度,其{200,200}
仍为bounds
,但{200,200}
的宽度和高度均为frame.size
。 200 * sqrt(2)
引用视图的自己的坐标系,bounds
指向 superview 的坐标系。{1}}。
答案 1 :(得分:0)
Mundi说了什么,但我想补充一点,如果你曾经想过为什么 bounds 甚至存在,那么在滚动时它会很有意义。 NSScrollView的 NSClipView 的边界是可见的NSScrollView文档视图的一部分。因此滚动时scrollView.contentView.bounds会发生变化,但scrollView.contentView.frame 显然不会。