一、我要你现在声明1个变量,来保存1个按钮的大小 1.声明1个变量啊,来保存这个控件的大小, 大小是什么啊,是不是这个控件的宽度和高度吧 要描述1个控件的大小,无非就两个数据嘛,1个是宽度,1个是高度 声明1个变量,来保存某个控件的大小, 1个控件的大小,无非就是两个数据,哪两个数据,1个是宽度,1个是高度, 所以,我想用1个东西,来描述这个宽度和高度合在一起封装1下,用类还是用结构体更合适啊,是不是结构体啊, typedef struct { double width; double height; } TestSize; 假如,1个按钮,宽度是50,高度是20,我要声明1个变量,来保存这个按钮的大小 TestSize size = {50,20}; 如果你以后,真的要声明1个变量,来保存1个按钮的大小的话,不用去定义这个结构体了,因为Foundation框架已经帮你定义好了, 叫做CGSize,这个结构体的签名如下: typedef struct { CGFloat width; CGFloat height; } CGSize; 这个结构体有2个属性,1个宽度,1个高度,什么类型的,是不是double类型的啊, 例如,CGSize size = {100,30}; 2.当然,还有一个结构体,叫做NSSize,你也猜到了,跟CGSize一样 这个结构体的定义如下: typedef CGSize NSSize; 这个NSSize和CGSize是同一个结构体,只不过定义了两个名字 3.这个CGSize结构体,一般情况下,用来表示1个控件的大小, CGPoint是来表示控件的坐标,CGSize是来表示控件的大小 二、CGSize声明并初始化的方式 1.第一种方式:CGSize size; size.width = 100; size.height = 30; 2.第二种方式:CGSize size = {100,30}; 3.第三种方式:CGSize size = {.width = 100 , height = 30}; 4.第四种方式:使用Foundation框架中提供的函数,来快速的得到1个CGSize结构体变量 这个函数叫做CGSizeMake(CGFloat width , CGFloat height) 例如,CGSizeMake(100,30); 这个时候,它就返回1个CGSize类型的结构体变量, CGSize size = CGSizeMake(100,30); 这个size的宽度就是100,高度就是30, 5.第五种方式:还有另一个函数,叫做NSMakeSize(CGFloat w,CGFloat h) 例如,NSMakeSize(100,30); CGSize size = NSMakeSize(100,30); 三、讲一个小案例 1.例如,我这儿有1个iOS界面,界面上有1个按钮,我想让你声明1个变量,来保存1个按钮,你用什么,用个类吧,为什么用类呢,因为这个按钮有很多属性,有什么属性: 1)坐标 2)大小 3)背景颜色 4)背景图片 这个按钮还有行为: 1)显示的行为 2)隐藏的行为 3)有点的行为 所以,如果说,我要声明1个封装数据,去表示1个按钮,那绝对是用1个类, 假如这个类,叫做TestButton类,在TestButton.h文件中: #import <Foundation/Foundation.h> //按钮类 @interface TestButton : NSObject //按钮类有哪些属性呢,我们刚刚说过,每1个按钮是不是有自己的坐标,所以 //当前按钮对象的坐标 @property(nonatomic,assign)CGPoint point; //按钮除了有坐标,还有什么,是不是还有大小,所以是不是也应该把这个按钮的大小也作为1个属性吧 //当前按钮的大小 @property(nonatomic,assign)CGSize size; //这个按钮还有什么属性,每1个按钮上面是不是都有1个文本 //当前按钮对象上的文本 @property(nonatomic,strong)NSString *text; //按钮还有什么,还有行为 - (void)show; - (void)hide; 在TestButton.m文件中, #import “TextButton.h” @implementation TextButton - (void)show{ NSLog(@“我显示出来了,我的坐标是%lf,%lf ,我的大小是%lf,%lf”, _point.x, _point.y, _size.width, _size.height ); - (void)hide{ NSLog(@“我隐藏了”); } @end 这样,我们这个方法就搞定了,这时候,你如果想要1个按钮,就创建对象就可以了吧 这个时候,我们不仅有1个按钮,最外面还有1个iOS界面,这个界面,你觉得是个什么东西,肯定也是个类啦,因为界面有什么,它是不是自己也有坐标,自己是不是也有大小,自己是不是也有行为,有显示的行为,是不是,我们再来1个界面类 来一个TestView类,在TestView.h文件中, #import <Foundation/Foundation.h> #import “TestButton.h” //iOS界面 @interface TestView : NSObject @property(nonatomic,assign)CGPoint point; @property(nonatomic,assign)CGSize size; //界面上面是不是有1个按钮啊,也就是说,这个按钮是谁的,是这个界面的,所以是不是应该把按钮当作这个界面的1个属性啊 //所以,把TestButton类引进来 @property(nonatomic,strong)TestButton *btn; //它自己有显示的方法,我就不说了,下面我们用1下,该怎么用,在main.m文件中, #import <Foundation/Foundation.h> #import “TestView.h” int main(){ //我现在要创建1个iOS界面,在界面上面,我要创建1个按钮 //先是不是来创建1个界面啊, //view1就是1个iOS界面 TestView view1 = [[TestView alloc] init]; //再设这个界面的属性,显示这个界面的坐标 view1.point = CGPointMake(0,0); view1.size = CGSizeMake(1920,1080); //现在,我要往这个界面上添加1个按钮 TestButton *btn = [[TestButton alloc] init]; btn.point = CGPointMake(100,100); btn.size = CGSizeMake(100,30); btn.text = @“点我呀”; //这个时候,这个按钮是不是就出现在上面了,没有,没有啊,是不是没有跟它建立关系啊, view1.btn = btn; //这样才是设置关系了,按钮才出现在上面了, //但是,你这么设计界面的话,这上面是不是只能有1个按钮,那我要是有两个按钮,该怎么办呢 //我是不是最好用1个数组啊,用1个数组来装控件啊 //所以,来一个NSMutableArray吧,因为我要动态的往里加嘛,叫subViews,在TestView.h文件中 @property(nonatomic,strong)TestButton *btn; //这句话,改成 @property(nonatomic,strong)NSMutableArray *subViews; //这个时候,如果我要往里面加控件的话,我要把这个控件btn,往这个view1,iOS界面里面加,我怎么写: 在main.m文件中 [view1.subViews addObject:btn]; //这个时候,我就把这个btn加进去了吧, //如果我又来个btn1, TestButton *btn1 = [[TestButton alloc] init]; btn1.point = CGPointMake(200, 200); btn1.size = CGSizeMake(100, 30); btn1.text = @“注册”; [view1.subViews addObject:btn1]; //这时候,我们这个iOS界面上,有几个按钮了,两个 好了,以上就是CGSize的用法