黑马程序员技术交流社区

标题: OC学习笔记13--Foundation框架中常用的struct介绍及使用 [打印本页]

作者: wowthe1st    时间: 2015-8-4 22:05
标题: OC学习笔记13--Foundation框架中常用的struct介绍及使用
时候有java和C基础同学迅速了解OC
  1. #import <Foundation/Foundation.h>

  2. int main()
  3. {
  4.         // CGPoint创建几个方式,结果相同
  5.         // {} 创建方式只能声明同时赋值,利用函数创建可以先声明后赋值
  6.         CGPoint p3,p4,p5;
  7.         CGPoint p1={0,0};
  8.         CGPoint p2={.x=0,.y=0};
  9.         p3=CGPointMake(0,0);
  10.         p4=NSMakePoint(0,0);
  11.         // 常量CGPointZero,表示{0,0},
  12.         // 屏幕上表示的话即 最左上角的点
  13.         p5=CGPointZero;
  14.        
  15.         // CGSize创建几个方式,结果相同
  16.         CGSize s3,s4,s5;
  17.         CGSize s1={0,0};
  18.         CGSize s2={.width=0,.height=0};
  19.         s3=CGSizeMake(0,0);
  20.         s4=NSMakeSize(0,0);
  21.         // 常量CGSizeZero,表示{0,0},
  22.         s5=CGSizeZero;
  23.        
  24.        
  25.         // CGRect创建几个方式,结果相同
  26.         CGRect r5,r6;
  27.         CGRect r1={0,0,0,0};
  28.         CGRect r2={{0,0},{0,0}};
  29.         CGRect r3={.origin.x=0,.origin.y=0,.size.width=0,.size.height=0};
  30.         CGRect r4={CGPointZero,CGSizeZero};
  31.         r5=CGRectMake(0,0,0,0);
  32.         r6=NSMakeRect(0,0,0,0);
  33.        
  34.         BOOL b1,b2,b3,b4;
  35.         //比较两个结构体值是否相等
  36.         b1=CGPointEqualToPoint(p1,CGPointZero);
  37.         b2=CGSizeEqualToSize(s1,CGSizeZero);
  38.         b3=CGRectEqualToRect(r1,r4);
  39.         // 判断点是否在矩形内
  40.         b4=CGRectContainsPoint(r4,CGPointZero);
  41.        
  42.         NSLog(@"b1=%d,b2=%d,b3=%d,b4=%d",b1,b2,b3,b4);
  43.         // 调用NSStringFromXXX函数将结构体转成OC字符串输出
  44.         NSLog(@"CGPointZero=%@",NSStringFromPoint(CGPointZero));
  45.         NSLog(@"CGSizeZero=%@",NSStringFromSize(CGSizeZero));
  46.         NSLog(@"r4=%@",NSStringFromRect(r4));
  47.        
  48.         // NSRange无对应CG版本
  49.         NSRange range1=NSMakeRange(0,10);
  50.         NSLog(@"range1=%@",NSStringFromRange(range1));
  51.        
  52.         return 0 ;       
  53. }
复制代码

几个常用结构体的定义:
        注:基本CG开头的结构体都有一个与之一样定义的NS开头的版本,
                        两者等价,但出于程序的可移植性考虑,项目中一般使用CG开头的版本,
                        CG开头版本多平台通用;
typedef struct _NSRange{
        unsigned long location,length;
       
} NSRange;

typedef struct _NSPoint{
        double x,y;
} NSPoint;

typedef struct _NSSize{
        double width,height;
} NSSize;

typedef struct _NSRect{
        NSPoint origin;
        NSSize size;
} NSRect;


typedef struct CGPoint{
        double x,y;
} CGPoint;

typedef struct CGSize{
        double width,height;
} CGSize;

typedef struct CGRect{
        CGPoint origin;
        CGSize size;
} CGRect;

几个操作这些结构体的常用函数:
        注:CG开头的函数实现在CoreGraphics framework中,项目中使用需加入此框架,
                                但Foundation的主头文件中也有对这些函数的声明(无实现),
                                因此无需在代码文件中 #import  CoreGraphics的主头文件;
                                一些NS开头的方法也有对应CG开头的版本,CG版本多平台通用;

//操作CGPoint,CGSize,CGRect这类结构体的函数,函数名命名规律相同               
       
NSString * NSStringFromPoint(CGPoint p); // 转成OC字符串方便打印

// 构造函数
NSRange NSMakeRange(unsigned long location,unsigned long length);
CGPoint NSMakePoint(double x,double y); // 构造CGPoint
CGPoint CGPointMake(double x,double y); //效果同上
CGRect CGRectMake(double x,double y,double width,double heigth); // 构造CGRect

// 比较两个结构体值是否相同
BOOL CGPointEqualToPoint(CGPoint p1,CGPoint p2);

// 判断点是否在矩形内
BOOL CGRectContainsPoint(CGRect rect,CGPoint point);







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2