-
【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
//按钮类
@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
#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
#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的用法
-
相关阅读:
C++11 lambda
【Vue】Pinia管理用户数据
如何集成 Spring Boot实现 MyCat读写分离?
RestTemplate获取json数组
Docker基本操作
子树的大小
MinGW-w64下载文件失败the file has been downloaded incorrectly!
Latex 辅助写作工具
P1540 [NOIP2010 提高组] 机器翻译(模拟)
XSS线上靶场---Warmups
-
原文地址:https://blog.csdn.net/madoca/article/details/128053378