`
stephen830
  • 浏览: 3011658 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ios view的frame和bounds之区别(位置和大小)

 
阅读更多

 

ios view的frame和bounds之区别(位置和大小)

转载自 http://blog.csdn.net/mad1989/article/details/8711697

 

前言:

 

学习ios开发有一段时间了,项目也做了两个了,今天看视频,突然发现view的frame和bound两个属性,发现bound怎么也想不明白,好像饶你了死胡同里,经过一番尝试和思考,终于弄明白bound的含义。PS:我承认我是一个很笨很笨的人。

 

所以现在记录下来,供以后查阅,同时方便所有和我一样有疑惑的人查看。

 

 

 

 

 

一、首先列一下公认的资料:

 

先看到下面的代码你肯定就明白了一些:
-(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);
}
很明显,bounds的原点是(0,0)点(就是view本身的坐标系统,默认永远都是0,0点,除非认为setbounds),而frame的原点却是任意的(相对于父视图中的坐标位置)。

 

 

 

再来看张图就明白了,

 



 

 

 

 

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

 

我个人认为,bounds稍微有点费解,稍不留神,想的多了,就会绕 进去。每个view都有一个本地坐标系统。这个坐标系统作用比较重要,比如触 摸的回调函数中的UITouch里面的>坐标值都是参照这个本地坐标系统的坐标。当然bounds这个属性也是参照这个本地坐标系统来的。其实本地 坐标系统的关键就是要知道的它的原点(0,0)在什么位置(这个位置又是相对于上层的view的本地坐标系统而言的,当然最上面的一层view就是 window它的本地坐标系统原点就是屏幕的左上角了)。通过修改view的bounds属性可以修改本地坐标系统的原点位置。

 

 

 

所以,我个人认为,bounds影响到子view的位置和大小。

 

 

 

 

 

二、demo演示:

 

  1. UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 250)];  
  2. [view1 setBounds:CGRectMake(-20, -20, 280, 250)];  
  3. view1.backgroundColor = [UIColor redColor];  
  4. [self.view addSubview:view1];//添加到self.view  
  5. NSLog(@"view1 frame:%@========view1 bounds:%@",NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds));  
  6.   
  7. UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];  
  8. view2.backgroundColor = [UIColor yellowColor];  
  9. [view1 addSubview:view2];//添加到view1上,[此时view1坐标系左上角起点为(-20,-20)]  
  10. NSLog(@"view2 frame:%@========view2 bounds:%@",NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds));  




 

(运行展示,图中说的很明白了哦)

 

 

 



 

 

(log输出日志表明,每个新的view默认的bounds其实都是(0,0))

 

 

 

 

  • 大小: 35.2 KB
  • 大小: 59.7 KB
  • 大小: 28.9 KB
分享到:
评论

相关推荐

    iOS view的frame和bounds之区别.pdf

    在iOS开发中,视图(UIView)的frame和bounds是两个非常重要的属性,它们都是CGRect类型,包含了视图的位置和大小信息。但是这两个属性在概念和使用上有所区别,了解这些差异对于开发iOS应用至关重要。 首先,frame...

    ios-UIView分类,可直接修改frame的值.zip

    这个压缩包“ios-UIView分类,可直接修改frame的值.zip”提供了一个`UIView`的分类,允许开发者更方便地调整视图的位置和大小。这种功能在布局和动画中尤其有用,因为频繁修改视图的属性时,简洁的代码可以提高效率...

    ios-随机分布View.zip

    随机分布则是指视图的位置和大小不遵循特定规律,而是由程序生成的随机值决定,从而营造出一种自然、不规则的效果。 1. **随机位置与大小**:在iOS中,我们可以利用Swift的`arc4random_uniform()`函数来生成0到某个...

    ios 各种view的代码实现demo

    - UIView是所有视图类的基类,它定义了基本的属性和方法,如frame、bounds、center、transform等。 - 视图的生命周期方法,如init(frame:)、awakeFromNib()和layoutSubviews()。 - 背景颜色设置,如...

    ios demo,可以在屏幕的任意指定的位置显示loading view

    这可以通过使用UIScreen的main.bounds属性来获取屏幕的大小,然后根据需求设置自定义加载视图的frame。 ```swift let desiredPosition = CGPoint(x:屏幕上x坐标, y:屏幕上y坐标) let loadingViewFrame = CGRect...

    ios电话面试题库

    Frame 描述当前视图在其父视图中的位置和大小,Bounds 描述当前视图在其自身坐标系统中的位置和大小。当 Frame 改变时,Bounds 也会改变。 4. SQLite 中插入特殊字符的方法 在 SQLite 中插入特殊字符需要使用特殊...

    ios-按钮图片的位置.zip

    1. frame属性:frame定义了视图在父视图中的位置和大小。你可以通过修改frame的origin(x,y坐标)来改变按钮的左上角位置,通过修改size(width,height)来调整按钮的大小。例如,如果你想要将按钮移动到屏幕的右...

    iOS 视图层次结构调试 DebugView.zip

    1. **查看视图树**:通过绘制视图层次结构,可以清晰地看到每个视图的位置、大小和层级关系。 2. **检查视图属性**:可能提供接口来查看每个视图的frame、bounds、center、transform等属性,这对于定位布局问题非常...

    iOS mask 层和 CAShapeLayer层中间挖去一部分

    shapeLayer.frame = view.bounds let path = UIBezierPath(rect: view.bounds) let holePath = UIBezierPath(rect: CGRect(x: 50, y: 50, width: 100, height: 100)) path.append(holePath) shapeLayer.path = ...

    ios-按钮动画.zip

    2. 设置初始frame:通过设置按钮的`frame`属性,可以定义其在视图层次结构中的初始位置和大小。例如,`button.frame = CGRect(x: 0, y: 0, width: 50, height: 50)`将创建一个位于左上角,宽高为50的按钮。 3. 编写...

    仿IOS列表某View悬停功能

    在iOS应用开发中,用户界面的设计和交互是关键因素之一,能够提升用户体验并使应用程序更具吸引力。"仿IOS列表某View悬停功能"是iOS开发中的一个独特特性,它允许特定视图(View)在用户滚动列表时保持固定在屏幕上...

    ios-多个 父子视图同时放大.zip

    `frame`和`bounds`是两个非常关键的概念,它们决定了视图在屏幕上的位置和大小。在本主题"ios-多个父子视图同时放大.zip"中,我们将会探讨如何在iOS应用中实现多个视图,包括父子视图,同时进行放大的动画效果。 ...

    Ios水平滑动View

    在iOS开发中,水平滑动View是一种常见的交互方式,它能提供类似TableView的滚动体验,但展示的内容在水平方向上连续。本知识点主要探讨如何利用UIScrollView控件来实现这一功能,因为ScrollView是iOS SDK中用于实现...

    iPhone坐标系统

    在开发过程中,理解并熟练运用frame和bounds的概念能够帮助开发者更准确地控制视图的位置和大小,对于实现复杂的布局以及动画效果是必不可少的。此外,对于视图层级的理解,以及如何通过AutoLayout等工具来动态地...

    iOS常见笔试题.pdf

    frame表示的是视图在其父视图坐标系统中的位置和大小,而bounds表示的是视图在其自身坐标系统中的位置和尺寸。理解这两个概念对于正确布局视图非常关键。 Objective-C不支持多重继承,但可以实现多个接口。接口在...

    IOS重绘View演示

    当一个UIView的`needsDisplay`属性被设置为YES,或者其`frame`、`bounds`、`transform`等属性发生改变时,系统会自动调用`drawRect:`方法,以便开发者能够自定义视图的绘制内容。在`drawRect:`方法内部,我们可以...

    IOS 实现渐变动画

    在iOS开发中,创建引人注目的用户界面是提升应用体验的关键之一,而渐变动画则是其中一种常用且有效的设计手法。本篇文章将深入探讨如何在iOS中实现一个具有圆环效果的渐变动画,主要关注`ProgressLayer`的使用。 ...

    ios-自定义Tabbarcontroller 和navigationController 切换动画可以高度自定义(图不会动).zip

    在iOS应用开发中,UI设计和用户体验至关重要,而TabBarController和NavigationController是苹果提供的两种主要的界面控制器。它们分别用于实现底部标签栏切换和页面的堆叠导航。本教程将重点讲解如何自定义...

    iphone动画物体沿圆形轨迹移动并同时改变大小

    在本例中,我们将使用这些方法来控制物体的位置和大小变化。 1. **物体沿圆形轨迹移动**: - 圆形轨迹的数学基础是极坐标系统。物体在屏幕上移动,我们可以将其位置更新为随着时间变化的极坐标转换为直角坐标的...

    ios-果冻效果.zip

    果冻效果通常通过改变视图的形状和大小来模拟物体的弹性变形。这涉及到对`UIView`的`frame`、`bounds`、`center`等属性进行动态调整。同时,为了实现更逼真的效果,可能还需要利用`cornerRadius`属性改变视图的圆角...

Global site tag (gtag.js) - Google Analytics