两个具有相同帧但没有完全重叠的UIImageView

时间:2011-11-14 18:05:46

标签: iphone objective-c cocoa-touch uiimageview

第一个UIImageView是使用frame(0,38,250,250)创建的,第二个UIImageView是使用第一个视图的帧创建的,并添加为第一个图像视图的子视图。结果显示第一个图像视图未被第二个图像视图完全覆盖。为什么两个视图都不重叠?我分配了两个具有不同背景颜色的imageview,因此更容易看到。

UIImageView *firstView = [[[UIImageView alloc] initWithFrame:CGRectMake(0,38,250,250)] autorelease];
[firstView setBackgroundColor:RGBACOLOR(36, 39, 39, 0.8)];
[self.view addSubview:firstView];

UIImageView *itemPic = [[[UIImageView alloc] initWithFrame:firstView.frame] autorelease];
itemPic.image = [UIImage imageNamed:@"color_c.png"];
[itemPic setBackgroundColor:RGBACOLOR(150, 150, 35, 0.8)];
[firstView addSubview:itemPic];

two imageviews are not exactly overlapped

3 个答案:

答案 0 :(得分:3)

帧在不同的坐标系中定义。每个视图的框架都在其父视图的坐标系中定义。该坐标系通常具有(0.0,0.0)作为父视图的左上角。具有不具有原点(0.0,0.0)的框架的子视图将不与其父视图对齐。

要始终将子视图与其对齐并填充其父视图,请使用:

view.frame = parentView.bounds;

答案 1 :(得分:1)

子视图被initWithFrame:firstView.bounds所需的帧偏移量所抵消。 Bound是CGRect,没有偏移(原点是0,0)。

答案 2 :(得分:1)

如果你想先添加第二个视图,那么为第二个CGRectMake(0, 0, 250, 250);创建框架。在这种情况下,两个视图将具有相同的坐标。

如果您要将第二个子视图添加到self.view,请使用firstView.frame创建它。在这种情况下,两个视图将具有相同的坐标。