CGPoint
该结构体一般情况下用下表示坐标,表示控件在界面上的位置
CGPoint和NSPoint都是同一个结构体,定义了两个名字
//官方定义
struct CGPoint{
CGFloat x;//CGFloat为double类型
CGFloat y;
};
typedef struct CGPoint CGPoint;
CGPoint声明并初始化
CGPoint p1;
p1.x = 20;
p1.y = 30;
CGPoint p2 = {20,30};
CGPoint p3 = {.x=20,.y=30};
CGPoint p4 = CGPointMake(20,30);
NSPoint p5 = NSPointMake(20,30);
CGSize
该结构体一般情况下用下表示控件的高度和宽度
CGSize和NSSize都是同一个结构体,定义了两个名字
//官方定义
struct CGSize{
CGFloat width;//CGFloat为double类型
CGFloat height;
};
typedef struct CGSize CGSize;
CGSize声明并初始化
CGSize p1;
p1.width = 20;
p1.height = 30;
CGSize p2 = {20,30};
CGSize p3 = {.x=20,.y=30};
CGSize p4 = CGSizeMake(20,30);
NSSize p5 = NSSizeMake(20,30);
CGRect
存储控件的位置和大小
CGRect和NSRect都是同一个结构体,定义了两个名字
//官方定义
struct CGRect{
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
CGRect声明并初始化
CGRect rect;
rect.origin.x=20;
rect.origin.y=30;
rect.size.width=100;
rect.size.height=30;
CGRect rect;
rect.origin = (CGPoint){20,30};
rect.size = (CGSize){100,30};
CGRect rect = CGRectMake(20,30,100,30);
NSRect rect = NSRectMake(20,30,100,30);
NSValue
NSRange、CGPoint、CGSize、CGRect都是结构体,他们的变量无法存储到集合之中
解决方案:将结构体存储到OC对象中,在将其存储到集合
NSValue类的对象就是用来包装结构体变量的
CGPoint p1 = CGPointMake(20,30);
CGPoint p2 = CGPointMake(120,130);
NSValue *v1 = [NSValue valueWithPoint:p1];
NSValue *v2 = [NSValue valueWithPoint:p2];
NSArray *arr = @[v1,v2];
for(NSValue *v in arr){
NSLog(@"%@",NSStringFromPoint(v.pointValue));
}