iOS开发——oc——founctation中常用结构体(NSRange、NSPoint\CGPoint、NSSize\CGSize、NSRect\CGRect)


          founcation中常用结构体


一、概述:

   在foundation框架中,有一些关于位置和尺寸的结构体,在我们实际开发ios的时候会经常被使用到,所以这里详细讲解下:

   NSRange : 表示范围

   NSPoint\CGPoint:表示坐标

   NSSize\CGSize:表尺寸

   NSRect\CGRect :表示坐标和尺寸


二、使用讲解:

1、NSRange (范围,常常和NSString这个类一起使用)

          (1)、初始化:

NSRange range = NSMakeRange(2, 4); // 表示从索引为2开始,长度为4这个范围

下面这两种方式,在开发中一般不会使用,了解下就可以:

 NSRange r1 = {2, 4};//不用

   NSRange r2 ={.location = 2, .length = 4};//不用

  (2)、实际应用:

// 1》获取某个字符串的位置

   NSString *str =@"ab cde fgh";

 NSRange range = [str rangeOfString:@"cde"];//获取字符串“cde”str中的范围

 NSLog(@"location %ld, length = %ld", range.location , range.length);

    

    // 2》NSRange,转换为NSString函数

    NSString *str2 =  NSStringFromRange(range);

    NSLog(@"%@",str2);


(3)、注意点

  // 注意,如果字符串不包含这个字符串,location NSNotFound==1length0

   NSRange range2 = [str rangeOfString:@"java"];

   NSLog(@"location %ld, length = %ld", range2.location , range2.length);// NSNotFound,使用ld输出乱码

   NSLog(@"NSNotFound %d", NSNotFound);// 输出为-1



       2、NSPoint\CGPoint、NSSize\CGSize、 NSRect\CGRect (一般都是用在iOS开发中,表示各个组件之间的关系,如包含、相交等)

(1)、初始化:(两种方式:(NSMakexxx\ CGXXXMake)

如:

   CGPoint p1 = NSMakePoint(10, 10);//  NSPoint p1 = NSMakePoint(10, 10);

    CGPoint p2 = CGPointMake(10, 10);//  NSPoint p2 = CGPointMake(10, 10); (常用)

   NSLog(@"x = %f, y = %f", p1.x, p1.y);

    

   NSSize s1 = NSMakeSize(100, 200);//  CGSize s1 = NSMakeSize(100, 100);

   NSSize s2 = CGSizeMake(100, 200);//  CGSize s2 = CGSizeMake(100, 100);

   NSLog(@"width = %f ,height = %f", s1.width, s1.height);


   NSRect r1 = CGRectMake(50, 50, 100, 200);// CGRect r1 = CGRectMake(100, 100, 200, 200);

   NSRect r2 = NSMakeRect(100, 100, 100, 200);// CGRect r2 = NSMakeRect(100, 100, 200, 200);

  CGRect r3 ={{10,10},{10,10}}; // 还可以写成这种方式

   NSLog(@"x = %f, y = %f, width = %f, height = %f", r1.origin.x, r1.origin.y, r1.size.width, r1.size.height);

*一般使用cg开头的结构体,因为可以跨平台使用,这里不做深的解释,了解就可

(2)、实际应用:

    // 1、结构体转换为字符串 (在oc中结构体不可以直接存储到NSArray等集合对象中,可以这样转换为字符串对象,然后存储)

    NSString *str1 =  NSStringFromPoint(p1);

    NSString *str2 = NSStringFromSize(s1);

    NSString *str3 = NSStringFromRect(r1);

    NSLog(@"%@", str3);


    // 2、原点、零尺寸rect0——CGPointZeroCGRectZero

    CGPointZero; // 就表示CGPointMake(0, 0);即,原点

    CGPointZero; // 表示 == {{0,0} ,{0,0}}

CGSizeZero; // 表示尺寸为0    

    // 3、常用函数(一般都是cg开头,长用在ios中组件是否相交等关系)

    NSLog(@"---------------是否相等---------------------------");

    BOOL isEqual = CGPointEqualToPoint(p1, p2);//点是否相同

    NSLog(@"是否相等:%d", isEqual);

    isEqual = CGSizeEqualToSize(s1, s2); // 判断尺寸是否相同

    NSLog(@"是否相等:%d", isEqual);

    isEqual = CGRectEqualToRect(r1, r2); // 判断坐标和尺寸是否相同

    NSLog(@"是否相等:%d", isEqual);

    

     NSLog(@"---------------包含判断---------------------------");

    //CGRectContainsPoint,是否包含某个点,边线和边点都不成立,只要在内部的点才成立

    BOOL isContain = CGRectContainsPoint(CGRectMake(0, 0, 10, 10), CGPointMake(10, 0));//判断某个坐标点p1,是否在某个rect之内(r1,这是点相交

    NSLog(@"CGRectMake(0, 0, 10, 10), CGPointMake(10, 0)——》是否包含某个点:%d", isContain);

    

    isContain = CGRectContainsPoint(CGRectMake(0, 0, 10, 10), CGPointMake(9.9 , 9.9));//判断某个坐标点p1,是否在某个rect之内(r1),在其内部

    NSLog(@"CGRectMake(0, 0, 10, 10), CGPointMake(10, 10)——》是否包含某个点:%d", isContain);

    

    NSLog(@"-------------------------rect是否包含rectCGRectContainsRect------------------------");

    //CGRectContainsRect 判断前一个rect,是否包含后一个rect,必须全部包含才可以,有一点超出都不行

    BOOL flag = CGRectContainsRect(CGRectMake(0, 0, 10, 10), CGRectMake(10, 10, 10, 10));//判后一个是在前面一个的里面,只要点相交

    NSLog(@"CGRectMake(0, 0, 10, 10), CGRectMake(10, 10, 10, 10) ——》是否包合:%d",flag);

    

    flag = CGRectContainsRect(CGRectMake(0, 0, 10, 10), CGRectMake(5, 5, 6, 6)); // 超出,不成立

    NSLog(@"CGRectMake(0, 0, 10, 10), CGRectMake(5, 5, 6, 6) ——》是否包合:%d",flag);

    

    flag = CGRectContainsRect(CGRectMake(0, 0, 10, 10), CGRectMake(5, 5, 5, 5)); // 在里面,完全包含,成立

    NSLog(@"CGRectMake(0, 0, 10, 10), CGRectMake(5, 5, 5, 5) ——》是否包合:%d",flag);

    

    //判断两个rect是否有相交 ——》用于ios组件是否相交

     NSLog(@"--------------------rectrect是否相交---------------------------------------------");

    // CGRectIntersection判断是否相交,并返回相交的部分,就算是一点相交都返回(如果不相交xyinf

    CGRect re = CGRectIntersection(CGRectMake(0, 0, 10, 10), CGRectMake(11, 11, 10, 10));//判断是否相交,如果把相交

   

    NSLog(@"是否相交:x = %.1f,y = %.1fwidth %.1f, height= %.1f", re.origin.x, re.origin.y,  re.size.width, re.size.height);

    

    re = CGRectIntersection(CGRectMake(0, 0, 10, 10), CGRectMake(10, 10, 10, 10));//判断是否相交,就算有一点相交,都返回那个点,只是尺寸大小为0

    NSLog(@"是否相交:x = %.1f,y = %.1fwidth %.1f, height= %.1f", re.origin.x, re.origin.y,  re.size.width, re.size.height);

    

    

    re = CGRectIntersection(CGRectMake(0, 0, 10, 10), CGRectMake(8, 8, 10, 10)); // 判断是否相交,如果相交返相交的部分的坐标和大小

    NSLog(@"是否相交:x = %.1f,y = %.1f,width %.1f, height = %.1f", re.origin.x, re.origin.y,  re.size.width, re.size.height);

    

    

    // CGRectIntersectsRect判断是否相交,如果相交就返回yes1,边点和边线的相交都不成立,返回0

    flag = CGRectIntersectsRect(CGRectMake(0, 0, 10, 10), CGRectMake(11, 11, 10, 10));

    NSLog(@"CGRectMake(0, 0, 10, 10), CGRectMake(11, 11, 10, 10)-》是否相交:%d",flag);

    

    flag = CGRectIntersectsRect(CGRectMake(0, 0, 10, 10), CGRectMake(10, 10, 10, 10));//只是有一点相交,不行

     NSLog(@"CGRectMake(0, 0, 10, 10), CGRectMake(10, 10, 10, 10)-》是否相交:%d",flag);

    

    flag = CGRectIntersectsRect(CGRectMake(0, 0, 10, 10), CGRectMake(0, 10, 10, 10));//相交一条线,也不行

    NSLog(@"CGRectMake(0, 0, 10, 10), CGRectMake(0, 10, 10, 10)-》是否相交:%d",flag);

    

    flag = CGRectIntersectsRect(CGRectMake(0, 0, 10, 10), CGRectMake(5, 9.9, 10, 10));//相交一部分,才可以成立

    NSLog(@"CGRectMake(0, 0, 10, 10), CGRectMake(5, 10, 10, 10)-》是否相交:%d",flag);





三、扩充知识:

1、结构体赋值函数的原理解析:(下面是我自己写的结构体赋值函数,注意了解)

// 赋值函数的原理,如CGRectMake

CGRect CGRectMakeCustom(CGFloat x, CGFloat y, CGFloat width, CGFloat height){


    CGRect rect;

    rect.origin.x = x;

    rect.origin.y = y;

    rect.size.width = width;

    rect.size.height = height;

   return rect;

}


*这就是赋值结构的函数类似代码

2、CoreGraphics.framework框架

我们在使用一些操作结构体函数和CGSizeZero等,需要我们引入这个框架。



(这就是我的基本了解,希望对刚学习ios的同学有些许帮助!!!)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值