zoukankan      html  css  js  c++  java
  • ios视图frame和bounds的对比

    子视图实际位置=父视图实际位置-父视图bounds坐标+子视图frame坐标

    一、bounds

      只影响“子视图”相对屏幕的位置,修改时不会影响自身相对屏幕的位置

      bounds坐标:自己定义的坐标系统,setbound指明了本视图左上角在该坐标系统中的坐标,

            默认值(0,0)

    二、frame

      修改时改变了自己的在父视图坐标系统(bounds坐标系统)的位置,自身位置和

      子视图位置都会被改变。

      frame坐标:  子视图左上角在父视图坐标系统(bounds坐标系统)中的坐标,默认值(0,0)

    三、图表解释

    先看到下面的代码你肯定就明白了一些:

    -(CGRect)frame{
        return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
    }
    -(CGRect)bounds{
        return CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
    }


    很明显,某个view的bounds的原点永远是(0,0)点(就是参照该view本身的坐标系统,默认永远都是0,0点,除非认为setbounds),而该view的frame的原点却是任意的(相对于父视图中的坐标位置)。

    再来看张图就明白了,

    frame: 该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)
    bounds:该view在本地坐标(自身)系统中的位置和大小。(参照点是,本地坐标系统,就相当于ViewB自己的坐标系统,以0,0点为起点)
    center:该view的中心点在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)

    bounds这个属性是参照这个本地坐标系统来的。其实本地坐标系统的关键就是要知道的它的原点(0,0)在什么位置。(这个位置又是相对于上层的view的本地坐标系统而言的,当然最上面的一层view就是self.window。它的本地坐标系统原点就是屏幕的左上角了。

    通过修改view的bounds属性可以修改本地坐标系统的原点位置,从而会影响该view所有的子view的坐标。

    iOS开发者交流群:180080550
  • 相关阅读:
    在controller的action内, 得到用户发过来的请求地址和参数url
    php Connection timed out after 30000 milliseconds
    htmlspecialchars_decode 解决掉 &
    max_spare_servers到底是个什么意思?
    mysql 不同条件count ,多条件count()
    阿里云centOS7.4 ftp连接不上的问题
    阿里云 导入自定义的镜像
    thinkphp3.2.3 + nginx 配置二级域名
    FlashFXP客户端 FTP连接,连接很慢的情况,
    PHP对象的使用,什么时候可以用中括号[], 什么时候可以用箭头->
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5348338.html
Copyright © 2011-2022 走看看