1、NSPoint 和 CGPoint
①他们都是结构体,保存坐标点信息(为什么加NS前缀,只是为了统一起来,但NSPoint是结构体不是类)
②NSPoint 和 CGPoint 其实是一个东西,都是表示二维平面的一个点
2、NSSize和CGSize
struct CGSize {
CGFloat width;
CGFloat height;
};
他们两个也是一回事,表示二维平面中某个物体的尺寸(宽度和高度)
3、NSRect和NSRect
struct CGRect {
CGPoint origin;
CGSize size;
};
他们两个也是一回事,表示二维平面中某个物体的位置和尺寸
(由于详细介绍了NSPoint 和 CGPoint,剩下两组就不一一细说了。要说明的是,苹果官方推荐的是CG开头的结构体定义)
①他们都是结构体,保存坐标点信息(为什么加NS前缀,只是为了统一起来,但NSPoint是结构体不是类)
②NSPoint 和 CGPoint 其实是一个东西,都是表示二维平面的一个点
代码:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// NSPoint原型(结构体,之所以NS前缀,是为了象征性保持一致,但是NSPoint不是类,是结构体)
// 显然 NSPoint 和 CGPoint 是一个东西
// struct CGPoint {
// CGFloat x;
// CGFloat y;
// };
// 初始化方式①
NSPoint point1={1.2,4.5};//point也不是对象,所以前面不用加 *
NSLog(@"x = %.2f,y = %.2f",point1.x,point1.y);
// 打印结果:
// 2015-09-15 20:00:22.708 NSPoint[2167:197921] x = 1.20,y = 4.50
// 初始化方式②
NSPoint point2;//point2的两个坐标值其实看底层都是double类型的
point2.x =123.2222;
point2.y =4.2;
// 将整个point2对象以字符串的格式输出(精度无法控制)
NSLog(@"%@",NSStringFromPoint(point2));
// 打印结果:(精度问题,导致了结果如此,如果不想让他这么长,就用上面的方式输出)
// 2015-09-15 20:00:22.709 NSPoint[2167:197921] {1.2222200000000001, 4.2000000000000002}
// 初始化方式③
NSPoint point3=NSMakePoint(12.4, 43.2);//调用NSMakePoint函数初始化,注意这里是 函数,而不是方法
// NS_INLINE NSPoint NSMakePoint(CGFloat x, CGFloat y) {
// NSPoint p;
// p.x = x;
// p.y = y;
// return p;
// }
NSLog(@"%@",NSStringFromPoint(point3));
// CGPoint 的初始化
// CGPoint point1={2,4}; //这样写就和上面NSPoint初始化的point1重名了,会提示错误 Redefinition of 'point1' ,意思是重复定义了这个点。所以更加说明了NSPoint和CGPoint是一回事
CGPoint p1={3.3,4.5};
CGPoint p2;
p2.x=1.2;
p2.y=3.4;
CGPoint p3=NSMakePoint(1.2, 3.3);
// 同样和上面一样,CGPoint创建的变量也能用三种初始化的方式初始化变量。说明了CGPoint和NSPoint是一回事。
}
return 0;
}
2、NSSize和CGSize
struct CGSize {
CGFloat width;
CGFloat height;
};
他们两个也是一回事,表示二维平面中某个物体的尺寸(宽度和高度)
3、NSRect和NSRect
struct CGRect {
CGPoint origin;
CGSize size;
};
他们两个也是一回事,表示二维平面中某个物体的位置和尺寸
(由于详细介绍了NSPoint 和 CGPoint,剩下两组就不一一细说了。要说明的是,苹果官方推荐的是CG开头的结构体定义)