本帖最后由 Medwyn 于 2014-7-5 22:02 编辑
李老师的视频到了Foundation这部分就没有文档了,为了方便刚学习的朋友,我把自己的笔记分享一下,由于代码块较多,就不使用插入代码功能了,格式可能有些乱,海涵~~
/*
了解以下四个结构体如何使用以及他们的用处
NSRange(location length)
NSPoint\CGPoint
NSSize\CGSize
NSRect
*/
使用以下函数必须添加CoreGraphics框架
1.NSRange
// range是范围的意思,顾名思义,NSRange是表示范围的方法
// NSRange的定义:
// typedef struct _NSRange {
// NSUInteger location;
// NSUInteger length;
// } NSRange;
// 其中NSUInteger是unsigned long类型
//
举个例子:
// @"i love oc"
// location:2
// length:4
// 上面两行代码表示love
注意:从0开始,空格也算
//
// {10,19,32,52,43,54}
// location:2
// length:4
// 表示:32 53 43 54
//
// 如何创建
//
// 回忆下以前学过的知识:
struct Date{
int year;
int month;
int day;
};
struct Date d1 = {2011,2,11};//在定义的同时赋值,与struct内的实例一一对应
struct Date d2 = {.month = 2, .day = 11, .year = 2011};//使用点语法创建一个新结构体
// 由于NSRange的定义中使用了typedef关键字,因此我们创建一个NSRange结构体就不需要加struct关键字了。
@"i love oc";//love的范围
NSRange r1 = {2 ,4}; //可读性差,一般开发中不使用
NSRange r2 = {.length = 4, .location = 2};//太长,也不用
// 我们常用Foundation框架自带的函数来创建一个新的NSRange结构体
NSRange r3 = NSMakeRange(2, 4);//开发中常用 掌握
2.NSString
// 创建一段新的字符串
NSString *str = @"i love oc";
//查找某个字符串在str的范围
NSRange range = [str rangeOfString:@"ve o"];
NSRange range2 = [str rangeOfString:@"java"];//如果找不到,length=0,location=NSNotFound=-1,此时打印的是loc = 9223372036854775807, length = 0,其中loc对应的那串数字是以无符号整型的方式打印的,转换成signed int方式就是-1
NSLog(@"%d", NSNotFound); //-1
NSLog(@"loc = %ld, length = %ld", range.location,range.length);//4 4
3.NSPoint
//NSPoint == CGPoint
// 其定义
struct CGPoint {
CGFloat x;
CGFloat y;
};
// 手机上的每一个ui元素都拥有自己的坐标,CGPoint就表示坐标,开发中一般使用CGPoint(跨平台)
// 新建一个CGPoint类型的数据
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20);//最常用
4.NSSize
// NSSize == CGSize
// 用来表示UI元素的尺寸
NSSize s1 = CGSizeMake(100, 60);
CGSize s2 = NSMakeSize(100, 60);
NSSize s3 = NSMakeSize(200, 80); //(宽度, 高度)
5.NSRect
// NSRect == CGRect
新建:
CGRect rect1 = CGRectMake(0, 0, 199, 22);//(x,y,宽度,高度)
CGRect rect2 = {{0,0},{100,90}};
CGRect rect3 = {p1,s2};
// CGPointZero == CGPointMake(0, 0) 常用
CGRect rect4 = {CGPointZero, CGSizeMake(100, 96)};
// //创建一个函数,返回CGRect类型的结构体
// CGRect myRect(CGFloat x, CGFloat y,CGFloat width, CGFloat height)
// {
// CGRect Rect;//新建一个名为Rect的CGRect结构体
// Rect.origin.x = x;
// Rect.origen.y = y;
// Rect.size.width = width;
// Rect.size.height = height;
//
// return Rect;
// }
6.结构体的调试
//1.遍历结构体,此处的点语法不是getter和setter,而是访问结构体的成员
NSLog(@"x=%f, y=%f, width=%f, height=%f", rect1.origin.x, rect1.origin.y,rect1.size.width,rect1.size.height); //太麻烦,不用
//2.把整个结构体先转换成字符串,再打印
// NSString * str = NSStringFromPoint(p1);
// NSString * str2 = NSStringFromSize(s3);
NSString * str3 = NSStringFromRect(rect1);
7.结构体常用的函数
//1.比较两个是否相同
// CGPointEqualToPoint(CGPointMake(10, 29), CGPointMake(10, 29));
// CGRectEqualToRect(CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>), <#CGRect rect2#>);
// CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>);
//
//2.判断范围内是否包含这个点
BOOL b2 = CGRectContainsPoint(CGRectMake(10, 89, 100, 20), CGPointMake(90, 90));
NSLog(@"%d", b2);//打印1
[img=480 ,360]http://img.blog.csdn.net/20140703214209906[/img]
//分析:CGRectMake(10, 89, 100, 20)相当于创建了一个左上顶点(10,89),宽度为100,高度为20的矩形。 判断(90,90)这个点是否在这个矩形上 这是很简单的数学问题,不再赘述。 |
|