`

UIView基础知识

    博客分类:
  • ios
阅读更多

UIView表示屏幕上的一块矩形区域,它在App中占有绝对重要的地位,因为IOS中几乎所有可视化控件都是UIView的子类。负责渲染区域的内容,并且响应该区域内发生的触摸事件

 

 

UIView的功能 1.管理矩形区域里的内容2.处理矩形区域中的事件3.子视图的管理 4.还能实现动画  UIView的子类也具有这些功能

 

下图就是视图的内层次

                                        

1)三个结构体 CGPoint、CGSize、CGRect

 

1.  CGPoint
 
struct CGPoint {  
  CGFloat x;  
  CGFloat y;  
};  
 
typedef struct CGPoint CGPoint;  
看到这个想必你已经懂了,不再解释。
 
2.CGSize
 
struct CGSize {  
  CGFloat width;  
  CGFloat height;  
};  
 
typedef struct CGSize CGSize;  
不解释。
 
3.CGRect
 
struct CGRect {  
  CGPoint origin;  //偏移是相对父视图的  
  CGSize size;  
};  
typedef struct CGRect CGRect;  
同样 不解释。
 
这三个结构体均在一个头文件里:CGGeometry.h

 

 

2)视图的最基本属性

frame和center都是相对于父视图的,bounds是相对于自身的

 

frame   是CGRect  frame的origin是相对于父视图的左上角原点(0,0)的位置,改变视图的frame会改变center

center  是CGPoint  指的就是整个视图的中心点,改变视图的center也会改变frame

bounds 是CGRect  是告诉子视图本视图的原点位置(通俗的说就是,子视图的frame的origin与父视图的bounds的origin的差,就是子视图相对于父视图左上角的位置,如果结果为负,则子视图在父视图外)

通过addSubview:这个方法添加子类,不管谁添加它,只要越晚添加,视图就在越上层

移除父视图也会把它得子视图移除

 

frame和bounds是UIView中的两个属性(property)。

frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)

bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)

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

 

 

 

3)几个基本界面元素:window(窗口)、视图(view)

 

1.UIView
 
下面来认识一下UIView类,这个类继承自UIResponder,看这个名字我们就知道它是负责显示的画布,如果说把window比作画框的话。我们就是不断地在画框上移除、更换或者叠加画布,或者在画布上叠加其他画布,大小当然 由绘画者来决定了。有了画布,我们就可以在上面任意施为了。很多简单的东西我会把库里面的内容贴出来,如果东西太多贴出来就不太好,朋友们自己去库文件里面看吧。这个类在UIView.h里面。下面我们先学习一些基础的东西,其他的东东会在以后慢慢展开。
 
UIView* myView =[[ UIView alloc]initWithFrame:CGRectMake(0.0,0.0,200.0,400.0)];     //这里创建了一块画布,定义了相对于父窗口的位置, 以及大小。  
 
我们可以把这块画布加到其他画布上,具体方法后面会讲到。我们还可以在这块画布上画上其它好玩的东东,具体情形后面会一一讲解。
 
 
 
2.UIWindow
 
UIWindow继承自UIView,关于这一点可能有点逻辑障碍,画框怎么继承自画布呢?不要过于去专牛角尖,画框的形状不就是跟画布一样吗?拿一块画布然后用一些方法把它加强,是不是可以当一个画框用呢?这也是为什么 一个view可以直接加到另一个view上去的原因了。
看一下系统的初始化过程(在application didFinishLauchingWithOptions里面):
 
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];  
self.window.backgroundColor = [UIColor grayColor];       //给window设置一个背景色  
 
[self.window makeKeyAndVisible];     //让window显示出来  
 
 

3.UIScreen类代表了屏幕,通过这个类我们可以获取一些想要的东东

 

CGRect screenBounds = [ [UIScreen mainScreen]bounds];    //返回的是带有状态栏的Rect 
CGRect viewBounds = [ [UIScreen mainScreen]applicationFrame];    //不包含状态栏的Rect  
 
//screenBounds 与 viewBounds 均是相对于设备屏幕来说的  
//所以 screenBounds.origin.x== 0.0 ;   screenBounds.oringin.y = 0.0;     
screenBounds.size.width == 320;  screenBounds.size.height == 480(或者其他分辨率有所差异)  
//所以 screenBounds.origin.x== 0.0 ;   screenBounds.oringin.y = 20.0;(因为状态栏的高度是20像素)   screenBounds.size.width == 320;  screenBounds.size.height == 480  
//取得StatusBar的位置和大小  
[self.view addSubview:theToolbar];  
CGRect statusBarRect = [[UIApplication sharedApplication]statusBarFrame];  
  
NSLog(@\"%@\", NSStringFromCGRect(statusBarRect));
 

 

4.实战演练

 

 

 
没结束我会用一个综合的 例子来总结我的学习成果,彻底理解所学,我觉得既然选择写代码,就要理解原理,否则只知其然不知其所以然是不能做一个好的程序员的。
新建一个工程选择Empty Application   名字为LW1
2)在application didFinishLaunchingWithOptions里面,你会发现系统已经建好一个画框了,我们现在就用系统帮我们建好的画框,你当然也可以自己建一个画框,不过没这个必要了,忘了讲了,一个应用程序只能有一个画框。
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
{  
 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];//系统帮你建画框  
 
     
 
    //自己测试一下 bounds与aplicationFrame的区别  
    CGRect bound = [[UIScreen mainScreen]bounds];  
    NSLog(@"boundwidth:%f    boundheight:%f ",bound.size.width, bound.size.height);  
    NSLog(@"boundx:%f    boundy:%f ",bound.origin.x, bound.origin.y);  
      
    CGRect appBound = [[UIScreen mainScreen]applicationFrame];  
    NSLog(@"appBoundwidth:%f appBoundheight:%f "  
           ,appBound.size.width,appBound.size.height);  
    NSLog(@"appBoundx:%f    appBoundy:%f ",appBound.origin.x, appBound.origin.y);  
  
    //画第一块画布然涂成蓝色,大小是320 X 100  
    CGRect CGone = CGRectMake(0.0, 0.0, 320, 100);//画个矩形,初始化位置与大小  
 
    UIView *v_one = [[UIView alloc]initWithFrame:CGone];//初始化view  
 
    v_one.backgroundColor = [UIColor blueColor];// 涂成蓝色  
 
    [self.window addSubview:v_one];//直接加到画框上  
      
 
    //第二块注意它的位置  
    CGRect CGtwo = CGRectMake(0.0, 100, 160, 100);//画个矩形、初始化位置与大小  
 
    UIView *v_two = [[UIView alloc]initWithFrame:CGtwo];//初始化view  
    v_two.backgroundColor = [UIColor redColor];//涂成红色  
 
    [self.window addSubview:v_two];//叠加到画框  
 
    //第三块注意他的位置  
    CGRect CGthree = CGRectMake(160, 100, 160, 100);
    UIView *v_three = [[UIView alloc]initWithFrame:CGthree];
    v_three.backgroundColor = [UIColor greenColor];
    [self.window addSubview:v_three];
 
    //第四块注意它的位置  
    CGRect CGfour = CGRectMake(0.0, 260, 320, 200);
    UIView *v_four = [[UIView alloc]initWithFrame:CGfour];
    v_four.backgroundColor = [UIColor orangeColor]; 
            [self.window addSubview:v_four];//  
   //第五块,计算一下它的位置,看看它的效果,  
    //你可以让试一下把这段代码移到第一快初始化的上面试试,会有意想不到的效果  
    CGRect CGfive = CGRectMake(100, 150, 160, 200);  
    UIView *v_five = [[UIView alloc]initWithFrame:CGfive];  
    v_five.backgroundColor = [UIColor yellowColor];  
    [self.window addSubview:v_five];  
    self.window.backgroundColor = [UIColor grayColor];
    [self.window makeKeyAndVisible];
 
    //最后记得release  
   [v_one  release];  
   [v_two  release];  
   [v_three  release];  
   [v_four  release];  
   [v_five  release];  
    return YES;  
}  

 

 

4)UIView的方法
 
一个 UIView 里面可以包含许多的 Subview(其他的 UIView),而这些 Subview 彼此之间是有所谓的阶层关系,这有点类似绘图软体中图层的概念,下面程式码示演示了几个在管理图层(Subview)上常用的方法,其程式码如下。
 
1.首先是大家最常使用的新增和移除Subview。
 
[Subview removeFromSuperview];     //将Subview从当前的UIView中移除 
[UIView addSubview:Subview];     //替UIView增加一个Subview  
 
2.在UIView中将Subview往前或是往后移动一个图层,往前移动会覆盖住较后层的 Subview,而往后移动则会被较上层的Subview所覆盖。
 
[UIView bringSubviewToFront:Subview];       //将Subview往前移动一个图层(与它的前一个图层对调位置)//将Subview往前移动一个图层(与它的前一个图层对调位置)
[UIView sendSubviewToBack:Subview];      //将Subview往后移动一个图层(与它的后一个图层对调位置)
  
3.在UIView中使用索引Index交换两的Subview彼此的图层层级。
 
[UIView exchangeSubviewAtIndex:indexA withSubviewAtIndex:indexB];    //交换两个图层  
 
4.使用Subview的变数名称取得它在UIView中的索引值(Index )。
NSInteger index = [[UIView subviews] indexOfObject:Subview名称];       //取得Index  
 
5.替Subview加上NSInteger 的註记(Tag)好让之后它们分辨彼此。
  
[Subview setTag:NSInteger];       //加上标记
[UIView viewWithTag:NSInteger];  //通过标记得到view 返回值为UIView
 
6.最后是取得UIView中所有的Subview,呼叫此方法会传回一个 NSArray,并以由后往前的顺序列出这些 Subview,下图中是列出范例图片里Root中所有的Subview。
 
[UIView subviews] ;        //取的UIView下的所有Subview 
分享到:
评论

相关推荐

    ios中关于uiview

    在iOS开发中,`UIView`是构建用户界面的基础,几乎所有的可见元素都基于它。`UIView`不仅负责绘制和显示内容,还处理用户的交互事件。以下是对标题和描述中涉及的`UIView`知识点的详细解释: 1. **Bounds和Frame的...

    UIView的介绍,OC版的

    **正文** `UIView`是iOS应用开发中的核心组件,它在Objective-C(OC)中扮演着重要的角色。本文将深入探讨`UIView`的基本概念...通过下载提供的资料,你可以深入学习`UIView`的相关知识,进一步提升你的iOS开发技能。

    UIView转化为ImageDemo

    UIView是iOS中的一个基础视图类,它是所有UI组件(如UILabel、UIButton等)的基类,用于在屏幕上显示内容和处理用户交互。而UIImage则是用来表示静态图像的数据对象,它可以被用作UIImageView的源图片,或者在其他...

    绘制UIView

    在iOS开发中,`UIView` 是一个非常基础且重要的组件,它是所有视图类的基类,用于在屏幕上展示内容。本示例项目"绘制UIView"着重探讨如何自定义`UIView`,特别是如何通过代码来绘制一个具有特殊形状,如顶部为凹进...

    UIView相关示例代码

    - UIView是所有UIKit视图的基础类,用于绘制和处理触摸事件。你可以自定义它的背景颜色、边框、透明度等属性。 - 视图的层次结构:UIView可以通过addSubview方法添加子视图,形成视图层次结构。子视图会覆盖父视图...

    画曲线图 UIView

    在iOS开发中,`UIView` 是一个非常基础且重要的组件,它是所有自定义视图的基础。本示例项目“画曲线图 UIView”旨在教你如何利用`UIView`来绘制类似股票图表的折线图,允许用户根据需求定制颜色和其他属性。`...

    IOS入门-UIView-简单地七彩霓虹灯Demo

    在本教程中,我们将探讨如何创建一个简单的“七彩霓虹灯”Demo,这对于初学者来说是一个很好的实践项目,能够帮助理解UIView的基础知识以及动画效果的应用。 首先,我们要了解UIView的基本属性和方法。UIView有...

    iPhone开发UIView

    在iOS应用开发中,`UIView`是核心组件之一,它构成了用户界面的基础。这篇博文“iPhone开发UIView”可能深入探讨了`UIView`及其在iPhone应用中的使用。`UIView`不仅是一个可视化的元素,也是事件处理、动画和视图...

    UIView Class Reference

    ### UIView Class Reference 知识点解析 #### 一、简介 `UIView` 是苹果iOS系统中用于构建用户界面的核心类之一。它属于UIKit框架的一部分,主要用于定义和管理屏幕上的可视元素,包括布局、动画和触摸事件处理等...

    UIView-UIImageEffects:从 UIView 创建模糊图像

    首先,我们要理解`UIImage`和`UIView`这两个基础类在iOS中的作用。`UIImage`通常用来存储和显示静态图片,而`UIView`是iOS界面的基本构建块,它负责显示内容、处理触摸事件等。在`UIView-UIImageEffects`中,主要...

    第3章-基础知识.zip

    在IT行业中,基础知识是任何开发者或技术爱好者学习新技能的基石。"第3章-基础知识.zip"这个压缩包文件显然包含了一个关于iOS游戏开发的基础教程。这个教程可能涵盖了多个关键概念,旨在帮助初学者理解iOS游戏开发的...

    ios 网络、json、 xml 、uiviewView 使用

    本文将详细探讨标题和描述中提及的几个核心知识点:iOS网络编程、JSON解析、XML处理以及UIView的使用。 首先,我们来讨论iOS的网络编程。在iOS应用中,网络请求通常是通过HTTP或HTTPS协议实现的,主要涉及的技术...

    Swift 2.1 为 UIView 添加点击事件和点击效果

    在iOS开发中,`UIView`是最基础的视图类,用于显示和操作各种内容,而`UIButton`则提供了内置的点击事件和视觉反馈。然而,`UIView`本身并不自带这些功能,因此在某些场景下,我们需要手动为其添加点击事件和点击...

    UIView-Parallaxify:UIView类别可向UIView添加视差效果

    1. **Objective-C语言基础**:首先,我们需要了解Objective-C是Apple的编程语言,用于开发iOS和macOS平台的应用。它的语法基于C语言,并引入了Smalltalk的面向对象特性。在"UIView-Parallaxify"中,开发者使用...

    swift-使用Swfit扩展为UIView添加随UIScrollView滚动产生视差效果

    这个"swift-使用Swift扩展为UIView添加随UIScrollView滚动产生视差效果"的主题主要涵盖了以下知识点: 1. **Swift扩展**:Swift扩展是一种为已有的类型添加新功能的方式,而无需继承或使用类别。通过扩展,我们可以...

    Swift语言基础知识及相关案例.zip

    在“Swift语言基础知识”部分,我们可以深入探讨以下几个核心概念: 1. **类型系统**:Swift拥有强大的静态类型系统,变量和常量在声明时必须指定类型,有助于防止运行时错误。它还支持类型推断,让代码更简洁。 2...

    (0015)-iOS/iPhone/iPAD/iPod源代码-视图切换(View Transition)-UIView Transition

    首先,我们要了解`UIView`类中的`transitionWithView:`方法,这是实现视图过渡的基础。这个方法允许我们在两个视图之间创建一个动画过渡,可以选择不同的过渡类型,比如`UIViewAnimationTransitionCurlUp`用于上翻页...

    界面设计课程1

    虽然部分内容存在乱码,但通过标题、描述以及标签(UIView),我们可以围绕UIView及界面设计来构建相关的知识点。 ### 界面设计课程1:UIView在iOS应用中的角色与实践 #### UIView简介 UIView是iOS应用程序中的...

    iOS自定义控件开发梳理总结

    首先,我们需要理解UIView的基础知识。UIView是iOS UI系统的核心组件,几乎所有的可视元素(如按钮、标签等)都继承自UIView。它不仅负责在屏幕上渲染内容,还处理用户交互事件。UIView内部包含了CALayer,用于内容...

Global site tag (gtag.js) - Google Analytics