当前位置: 首页 > news >正文

定制网站系统开发廊坊网站建设系统

定制网站系统开发,廊坊网站建设系统,市场推广12种推广渠道,深圳网站制作公司资讯把frame理解为占用区域,把bounds理解为边界。View在旋转过程中,其实自己的坐标系统并没有发生改变,bounds中的origin只能通过setBounds方法修改。 frame 定义了视图在其父视图坐标系统中的位置和大小。其坐标系是相对于俯视图的坐标系。 bou…

把frame理解为占用区域,把bounds理解为边界。View在旋转过程中,其实自己的坐标系统并没有发生改变,bounds中的origin只能通过setBounds方法修改。

frame 定义了视图在其父视图坐标系统中的位置和大小。其坐标系是相对于俯视图的坐标系。
bounds 定义了视图自身坐标系统中的位置和大小。其坐标系是相对于自己本身视图的坐标系。

UIView.h中的注释:

// 如果视图进行了变换,不要使用 frame,因为它不会正确反映视图的实际位置。使用 bounds + center 代替。
@property(nonatomic) CGRect frame;// 如果非恒等变换,请使用 bounds/center 而不是 frame。
@property(nonatomic) CGRect bounds;      // 默认 bounds 是原点为零,大小为 frame 的大小。
@property(nonatomic) CGPoint center;      // center 是 frame 的中心,相对于 anchorPoint。
  • bounds的x,y是根据自己的坐标系统而言的。没错,每个view都有自己的坐标系。以自己左上角点为坐标原点。所以bounds的x,y默认为(0,0),除非调用setBounds方法;
  • frame的size不一定等于bounds的size,在旋转后它们的size就不一样了。

有如下示例:


- (void)viewDidLoad {[super viewDidLoad];UIButton *animateButton = [UIButton buttonWithType:UIButtonTypeSystem];animateButton.frame = CGRectMake(100, 250, 100, 50);[animateButton setTitle:@"Animate" forState:UIControlStateNormal];[animateButton addTarget:self action:@selector(startAnimation) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:animateButton];self.fView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];[self.view addSubview:self.fView];self.fView.backgroundColor = [UIColor orangeColor];self.sView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];[self.fView addSubview:self.sView];self.sView.backgroundColor = [UIColor blueColor];NSLog(@"Bounds:");NSLog(@"fView x:%f; sView x:%f", self.fView.bounds.origin.x, self.sView.bounds.origin.x);NSLog(@"fView y:%f; sView y:%f", self.fView.bounds.origin.y, self.sView.bounds.origin.y);NSLog(@"frame:");NSLog(@"fView x:%f; sView x:%f", self.fView.frame.origin.x, self.sView.frame.origin.x);NSLog(@"fView y:%f; sView y:%f", self.fView.frame.origin.y, self.sView.frame.origin.y);
}- (void) startAnimation {[self.fView setBounds:CGRectMake(60, 60, 100, 100)];NSLog(@"Bounds:");NSLog(@"fView x:%f; sView x:%f", self.fView.bounds.origin.x, self.sView.bounds.origin.x);NSLog(@"fView y:%f; sView y:%f", self.fView.bounds.origin.y, self.sView.bounds.origin.y);NSLog(@"frame:");NSLog(@"fView x:%f; sView x:%f", self.fView.frame.origin.x, self.sView.frame.origin.x);NSLog(@"fView y:%f; sView y:%f", self.fView.frame.origin.y, self.sView.frame.origin.y);
}

点击按钮我们发现,明明更改的是fView的bounds,为什么fView的位置没变,但是sView的位置向左上了呢?
其实setBounds中的(x,y)只改变自己的坐标系统,子View的bounds和frame并不会改变;
setBounds是修改自己坐标系的原点位置,进而影响到子View的显示位置;
bounds改变位置时,改变的是子视图的位置,自身没有影响,其实就是改变了自身的坐标系原点,默认原点在左上角。

因此执行完setBounds后,实际上是将当前fView的视图的原点移到了相对于原来原点的(60,60)位置,但是由于fView设定的frame是(100,100),因此它本身的frame不变,只是相当于移动了坐标系往左上了。又因为sView是fView的子视图,sView的frame是相对于fView的坐标系来设定位置的,因此,sView还是处于相对于fView的(0,0)位置,因此我们看上去sView的位置就像是随着fView的坐标系一起向左上移动了,但实际上sView的frame没有改变,打印出来还是(0,0)。

总结

frame: 描述视图在其父视图中的位置和大小,是“绝对”的。
bounds: 描述视图自身的内容区域和尺寸,是“相对”的。

http://www.yayakq.cn/news/332450/

相关文章:

  • 广州品牌网站建设医疗器械三证是哪三证
  • 云南大永高速公路建设指挥部网站wordpress 文章id修改
  • 微信制作宣传网站有哪些北京网络营销的培训课程
  • 济南哪个网络公司建网站好网络规划设计师教程pdf
  • 铁岭网站建设公司南宁建站官网
  • 做网站公司未来的发展方向网页页面设计尺寸
  • 邯郸做企业网站设计的公司php做的卖水果网站
  • 北京pc端网站开发如何做360搜索网站
  • 建设网站的运行费包括什么潍坊网站开发招生信息
  • .net网站服务器北京南站核酸检测地点
  • 可以免费搭建网站吗企业微网站建设方案
  • 公司网站后台登陆免费公众号编辑模板
  • 广州建设网站制作斐讯路由器做网站映射
  • 公司网站的主页优化个人网站效果图
  • 摄影照片投稿网站网站图片加alt标签
  • 做快递网站难吗企业网站建设公司上海
  • 在哪里做网站效果好工信部的网站备案信息
  • 有经验的永州网站建设义乌外贸网站建设来啦
  • 网站可以做弹窗广告么网站文字专题页面怎么做的
  • 网站建设对教育解决方案友情链接检索数据分析
  • 厦门手机网站建设优化关键词排名seo
  • 做企业免费网站哪个好些网站开发安全
  • 太原建设厅网站跨境电商免费平台有哪些
  • 福州市建设局职改办门户网站如何制作自己的视频网站
  • 广州网站建设系统开发seo 什么意思
  • 二维码制作网站有哪些dw网页制作模板下载
  • 电商网站首页图片seo就业
  • 个人在线做网站免费网页设计制作手机网站
  • 网站设计与建设报告网站建设与维护的重要性
  • 邯郸建公司网站价格毕设网站代做一般预算多少钱