一、Foundation框架中常用的结构体 1.例如,在手机界面上,有一个按钮,我要你定义一个变量,来保存这个按钮的位置, 定义1个变量来保存按钮在iOS界面上的位置, 位置,什么是位置,就是坐标对不对,就是坐标 这个坐标是相对于什么的坐标, 哪1点相对于什么的坐标, 记住,坐标是空间左上角的那1点,相对于这个iOS界面的坐标,我要你声明1个变量,来保存这1点的坐标,你该什么1个什么类型的变量呢 结构体,为什么是结构体呢,1个坐标,我们平面上的1个坐标,要用几个数据来描述呢,2个 1个x坐标,和1个y坐标, 所以,要描述这1点的话,两个封装数据,1个x坐标,1个y坐标, 那我们说可以用类,也可以用结构体吧, 如果是你的话,你选类,还是选结构体, 肯定是结构体,因为这个点有行为吗,没有,并且只有2个属性,所以这个时候,我们就用结构体, 那么这个点的坐标,我们怎么来的啊, 原点,我们说是哪1点呢,iOS界面最左上角的点,是原点, 这个原点,x坐标是0,y坐标也是0, 越往右边,x值越大,越往下边,y值越大, 我们定义1个结构体,来表示控件在界面上的坐标, 如果要我们定义的话,该怎么定义, #typedef struct { int x; int y; } TestPoint; 这个时候,如果我要声明1个变量来保存这1点的坐标的话,我是不是只需要声明1个TestPoint变量就可以了, TestPoint p1 = {20 , 30}; p1这个变量,它表示的就是这个按钮的坐标,横坐标是20 , 纵坐标是30, 如果我们真的要去声明1个结构体,来保存这个点的坐标的话,就这么声明就可以了,幸运的是,这个结构体不用我们自己去定义了,因为这个结构体,Foundation框架里面已经定义好了, 在Foundation框架中,已经定义了1个结构体,叫做CGPoint, CGPoint的签名如下: typedef struct { CGFloat x; CGFloat y; } CGPoint; 你会发现这个结构体里面有几个属性啊,2个,x和y,这两个属性是什么类型的,CGFloat类型的,那这个CGFloat是个什么东西, 怎么办,是不是点进去看一下啊, CGFloat的签名如下: typedef CGFLOAT_TYPE CGFloat; CGFLOAT_TYPE又是个什么东西,它的签名如下: #define CGFLOAT_TYPE double; 所以啊,这个CGFloat,实际上就是1个double类型, 这个结构体,CGPoint,一般情况下是用来表示坐标的, 特别是用来表示控件在界面上的位置, 其实还有一个结构体,叫做NSPoint,这个NSPoint是个什么东西,它的签名如下: typedef CGPoint NSPoint; 实际上NSPoint就是CGPoint, 所以CGPoint和NSPoint是不是都是一样的, CGPoint与NSPoint都是同1个结构体, 只不过定义了2个名字 二、声明CGPoint变量并初始化的方式 1.第一种方式:CGPoint p1 ; p1.x = 20; p1.y = 30; 2.第二种方式: CGPoint p1 = {20,30}; 这时候,它就可以按照顺序,把第一个值赋给我们第一个属性x,把第二个值赋给我们第二个属性y, 3.第三种方式: CGPoint p1 = {.x = 20 , .y = 30}; 4.第四种方式:如果你想创建1个CGPoint结构体变量的话,你可以用Foundation框架中提供的1个函数, Foundation框架中提供的函数来快速的创建1个CGPoint结构体变量, CGPointMake(CGFloat x,CGFloat y); 例如,CGPointMake(20,30); 这个时候,这个方法,就会返回1个x的值是20,y的值是30的CGPoint结构体变量, CGPoint p1 = CGPointMake(20,30); NSLog(@“p1.x=%lf,p1.y=%lf”,p1.x,p1.y); 输出:p1.x = 20.000000 , p1.y = 30.000000 所以,这个方法,CGPointMake( x , y ); CGPoint p1 = CGPointMake(20,30); 5.还1个函数,叫做NSMakePoint(CGFloat x,CGFloat y) 这个函数,跟CGPointMake函数的功能是1样的, 这个函数返回一个CGPoint结构体变量,我能不能用NSPoint接,可以 因为NSPoint和CGPoint都是1样的, NSPoing p1 = NSMakePoint(20,30); 所以,也可以用NSMakePoint( x , y ); NSPoint p1 = NSMakePoint(20,30); 我们后面,每天,基本上都要跟这个结构体打交道,我们基本上都不会用前3种方法去声明,因为那样太麻烦了,我们基本上都会用后两种方法去声明,对,用函数,直接用函数,它就会干嘛呢,就会返回这个结构体给我,好了,这就是我们的第1个结构体,叫做CGPoint,或者叫什么呢,叫做NSPoint,它的作用,一般情况下,来表示我们iOS界面上的1个控件的坐标,而我们刚刚讲过,1个控件的坐标,都是这个控件左上角的点,相对于它的父控件原点的1个位置