【CGSize Objecive-C语言】

一、我要你现在声明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的用法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值