JAVA边界布局和setbound_UIView框架、边界和中心

本文详细介绍了JAVA视图布局中的关键概念——框架、边界和中心。框架(frame)是视图在 superview 坐标系中的矩形,边界(bounds)是视图自身坐标系中的矩形,中心(center)则决定了视图在 superview 中的精确中心点。内容涵盖了frame、bounds、center之间的关系,以及如何通过它们来调整视图的位置和大小。示例代码展示了如何使用这些属性来操作视图,并解释了clipsToBounds和masksToBounds属性的作用。
摘要由CSDN通过智能技术生成

由于我提出的问题已被多次看到,我将提供一个详细的答案。如果您想要添加更多正确的内容,请随意修改它。

首先,重温一下这个问题:框架、界限和中心以及它们之间的关系。

框架风景frame (CGRect)是其矩形在superview的坐标系。默认情况下,它从左上角开始。

界风景bounds (CGRect)在自己的坐标系中表示视图矩形。

中心 A center是CGPoint以superview的坐标系,它决定了观点的精确中心点的位置。

摘自这些是以前属性之间的关系(它们在代码中不起作用,因为它们是非正式方程):frame.origin = center - (bounds.size / 2.0)

center = frame.origin + (bounds.size / 2.0)

frame.size = bounds.size

注:如果视图被旋转,则这些关系不适用。欲了解更多信息,我建议您查看以下图片基于当然可以。学分@大黄.

使用frame允许您重新定位和/或调整其内的视图的大小。superview..通常可以从superview例如,当您创建特定的子视图时。例如:// view1 will be positioned at x = 30, y = 20 starting the top left corner of [self view]

// [self view] could be the view managed by a UIViewControllerUIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(30.0f, 20.0f, 400.0f

, 400.0f)];    view1.backgroundColor = [UIColor redColor];[[self view] addSubview:view1];

当您需要绘制内部的坐标时,view你通常指的是bounds..一个典型的例子可以是在view子视图作为第一次嵌入的一个子视图。绘制子视图需要知道bounds超级视图。例如:UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(50.0f, 50.0f, 400.0f, 400.0f)];

view1.backgroundColor = [UIColor redColor];UIView* view2 = [[UIView alloc] initWithFrame:CGRectInset(view1.bounds, 20.0f, 20.0f)];

view2.backgroundColor = [UIColor yellowColor];[view1 addSubview:view2];

更改bounds一片风景。例如,如果更改bounds size,frame变化(反之亦然)。更改发生在center风景。使用下面的代码,看看会发生什么:NSLog(@"Old Frame %@", NSStringFromCGRect(view2.frame));NSLog(@"Old Center %@", NSStringFromCGPoint(view2.center));

CGRect frame = view2.bounds;frame.size.height += 20.0f;frame.size.width += 20.0f;view2.bounds = frame;NSLog(@"New Frame %@",

NSStringFromCGRect(view2.frame));NSLog(@"New Center %@", NSStringFromCGPoint(view2.center));

此外,如果你改变了bounds origin你改变origin它的内部坐标系。默认情况下,origin是在(0.0, 0.0)(左上角)例如,如果更改origin为view1现在,您可以看到(如果需要,请注释前面的代码)左上角view2触碰view1一。动机很简单。你对我说view1它的左上角现在就在这个位置(20.0, 20.0)但既然view2氏frame origin从(20.0, 20.0),它们将重合。CGRect frame = view1.bounds;frame.origin.x += 20.0f;frame.origin.y += 20.0f;view1.bounds = frame;

这个origin表示view在其范围内的地位superview但是描述bounds中心。

最后,bounds和origin都不是相关的概念。都允许派生frame(见以前的方程)。

视图1的案例研究

下面是使用以下代码段时发生的情况。UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(30.0f, 20.0f, 400.0f, 400.0f)];view1.backgroundColor = [UIColor redColor];

[[self view] addSubview:view1];NSLog(@"view1's frame is: %@", NSStringFromCGRect([view1 frame]));NSLog(@"view1's bounds is: %@",

NSStringFromCGRect([view1 bounds]));NSLog(@"view1's center is: %@", NSStringFromCGPoint([view1 center]));

相对图像。

相反,如果我改变了[self view]如下所示。// previous code here...CGRect rect = [[self view] bounds];rect.origin.x += 30.0f;rect.origin.y += 20.0f;[[self view] setBounds:rect];

相对图像。

你在这里对我说[self view]它的左上角现在这个位置(30.0,20.0),但是view1其帧原点从(30.0,20.0)开始,它们将重合。

附加参考资料(如果需要,可以使用其他引用进行更新)

关于clipsToBounds(来源:Apple doc)将此值设置为YES将使子视图被裁剪到接收方的边界。如果设置为no,其帧扩展到接收器的可见边界之外的子视图不会被裁剪。默认值为否。

换句话说,如果一个视图frame是(0, 0, 100, 100)它的子视图是(90, 90, 30, 30),您将只看到该子视图的一部分。后者不会超过父视图的界限。

masksToBounds等于clipsToBounds..取而代之的是UIView,则此属性应用于CALayer..在引擎盖下面,clipsToBounds打电话masksToBounds..有关进一步的参考资料,请参阅UIView的剪贴画-ToBound和CALayer的面具-ToBound之间的关系如何?.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值