1.安裝Xcode工具后會自帶開發中常用的框架,存放的地址路徑是:
/applications/Xcode.app/Contents/Developer/Platforms/iphoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/
2.在iOS開發中所有框架中Foundation框架是最基礎的框架,Foundation框架里面包含了常用的類和數據類型比如結構體、枚舉等
3.使用Foundation框架只要包含它的主頭文件<Foundation/Foundation.h>即可,主頭文件里面包含了框架中所有內容的頭文件
4.Foundation框架中常用的結構體:
NSRange、NSPoint/CGPoint、NSSize/CGSize、NSRect/CGRect
(1) 一般結構體的用法如下:
// 定義結構體 struct Date { int year; int month; int day; }; // 依次按照結構體順序為結構體賦值 struct Date date = {2014,3,20}; // 不按結構體順序為結構體賦值 struct Date date2 = {.year=2014, .day=20, .month=3};
(2) NSRange結構體:用來描述范圍
// 用于查看范圍typedef struct _NSRange { NSUInteger location; // 起始位置 NSUInteger length; // 長度} NSRange;
// NSUInteger 類型為無符號類型,可以簡單理解為表示正整數的類型,在NSLog輸出時用ld// 比如想查看字符串"I like oc"中的like在整個字符串中的范圍,有三種實現方式: // 字符串總的起始位置為0空格也要計算,那么love的起始位置為2,當然love的長度為4 // 下面兩種實現都是使用為NSRange結構體賦值的方式來實現 NSRange r1 = {2,4}; // 不推薦使用 NSRange r2 = {.location = 2, .length = 4}; // 不推薦使用 // 第三種實現方式是調用NSMakeRange()函數來實現 NSRange r3 = NSMakeRange(2, 4); // 推薦使用
// 比如想查看字符串"I like oc"中的like在整個字符串中的范圍 NSString *str = @"I like oc";
// NSString類的分類已經對這種需求做了實現 因此可以直接調用類方法來實現 NSRange range = [str rangeOfString:@"like"];
// 打印的NSRange結構體中的變量由于都是NSUInteger類型 因此在輸出時用ld NSLog(@"location = %ld, length = %ld",range.location,rang.length);
注意:如果沒有找到要查找的值NSRange中的length = 0, location = NSNotFound,其中NSNotFound如果以NSLog(@"%d",NSNotFound); 輸出一長串 數字;而如果以 NSLog(@"%d",NSNotFound); 輸出的就是 -1
(3)NSPoint結構體:通過一個點坐標來標識元素位置
// 設置 double 類型的別名為 CGFLOAT_TYPE # define CGFLOAT_TYPE double // 定義CGFloat類型為double類型 typedef CGFLOAT_TYPE CGFloat; // 定義CGPoint結構體 struct CGPoint { CGFloat x; CGFloat y; }; // 定義CGPoint結構體為CGPoint類型 typedef struct CGPoint CGPoint; // 設置結構體CGPoint = NSPoint typedef CGPoint NSPoint;
總結:可以看出CGPoint = NSPoint 本質都是結構體,里面包含了兩個double類型來描述一個點
// 同一個點的兩種表現方式 CGPoint point = NSMakePoint(20, 20); // 不常用 NSPoint point2 = CGPointMake(20, 20); // 常用
// CGPointZero == CGPointMake(0,0);
(3)NSSize結構體:描述元素的尺寸(寬和高),定義和NSPoint類似不再贅述,一般用法為:
CGSize size = NSMakeSize(20, 40); NSSize size2 = CGSizeMake(40, 20); // 常用
(4)CGRect結構體:用于描述元素的位置(CGPoint)和尺寸(CGSize),因此可以說CGRect是描述了一個在手機屏幕上的矩形
struct CGRect { CGPoint origin; // 描述元素位置坐標 CGSize size; // 描述元素尺寸};
typedef struct CGRect CGRect;
// 描述一個坐標位置為(20,20)寬高分別為50和100的元素 CGRect rect = CGRectMake(20, 20, 50, 100); // 常用 NSRect rect2 = NSMakeRect(20, 20, 50, 100);
CGRectZero == CGRectMake(0,0,0,0);
CGSizeZero == CGSizeMake(0,0);
CGPointZero == CGPointMake(0,0);
// 第一種寫法:坐標為(20,20)寬高分別為50和100 CGRect rect = {{20,50},{50,100}}; // 第二種寫法:坐標為(20,20)寬高分別為50和100 NSPoint point = CGPointMake(20, 20); NSSize size = CGSizeMake(50, 100); CGRect rect2 = {point,size}; // 第三種寫法:坐標為(0,0)寬高分別為50和100 CGRect rect3 = {CGPointZero,CGSizeMake(50, 100)};
(5)模擬函數CGRectMake的實現過程
// 模擬CGRectMake方法的實現CGRect CGRectMake2(CGFloat x, CGFloat y, CGFloat width, CGFloat height){ // 定義一個CGRect類型的結構體rect CGRect rect; // 為結構體內部坐標x/y賦值 rect.origin.x = x; rect.origin.y = y; // 為結構體內部遲鈍坐標width/height賦值 rect.size.width = width; rect.size.height = height; return rect;}
// 依照這一邏輯:CGPointMake函數、CGSizeMake函數都可以模擬實現
5.如何快速查看結構體中的值
NSRect rect = CGRectMake(20, 20, 50, 100);
NSLog(@"x = %f, y = %f, width = %f, height = %f",rect.origin.x, rect.origin.y , rect.size.width, rect.size.height); // 這里的. 不是get方法只是單純的從結構體中獲取值而已
NSRect rect = CGRectMake(20, 20, 50, 100); // 先將結構體轉換稱為字符串 NSString *strRect = NSStringFromRect(rect); // 直接打印轉換后的字符串 NSLog(@"%@",strRect);
// NSSize/NSPoint這兩種結構體NSStirng也提供了類似的方法
6.結構體比較常用的函數


// 1.判斷兩個點的位置是否相等 BOOL pointIsEqual = CGPointEqualToPoint(CGPointMake(50, 100), CGPointMake(100, 50)); NSLog(@"%d",pointIsEqual); // 2.判斷尺寸大小是否相等 BOOL sizeIsEqual = CGSizeEqualToSize(CGSizeMake(50, 100), CGSizeMake(50, 100)); NSLog(@"%d",sizeIsEqual); // 第一種寫法:坐標為(20,20)寬高分別為50和100 CGRect rect1 = {{20,50},{50,100}}; // 第二種寫法:坐標為(20,20)寬高分別為50和100 NSPoint point = CGPointMake(20, 20); NSSize size = CGSizeMake(50, 100); CGRect rect2 = {point,size}; // 3.判斷兩個矩形是否相等 BOOL rectIsEqual = CGRectEqualToRect(rect1, rect2); NSLog(@"%d",rectIsEqual); // 4.判斷一個點是否在矩形上面 BOOL isContent = CGRectContainsPoint(rect1, CGPointMake(20, 50)); NSLog(@"%d",isContent);
新聞熱點
疑難解答