国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOSFoundation框架簡介-1.常用結構體的用法和輸出

2019-11-14 20:36:02
字體:
來源:轉載
供稿:網友

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結構體:用來描述范圍

  • 查看官方定義的NSRange
// 用于查看范圍typedef struct _NSRange {    NSUInteger location;    // 起始位置    NSUInteger length;      // 長度} NSRange;

// NSUInteger 類型為無符號類型,可以簡單理解為表示正整數的類型,在NSLog輸出時用ld
  • NSRange的簡單說明和用法
    // 比如想查看字符串"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); // 推薦使用
  • 查找NSString類對象中某些字符在整個類對象中的NSRange
// 比如想查看字符串"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結構體:通過一個點坐標來標識元素位置

  • 官方定義的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類型來描述一個點

 

  • NSPoint的一般用法
    // 同一個點的兩種表現方式    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是描述了一個在手機屏幕上的矩形

  • 官方定義的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.結構體比較常用的函數

  • 結構體常用函數是在CoreGraphics.framework框架下面,因此需要先添加框架

 

  • 較常用的方法
    // 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);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遂宁市| 历史| 遵义县| 乡宁县| 建始县| 武乡县| 耿马| 开化县| 东宁县| 崇明县| 遵义市| 含山县| 日照市| 荃湾区| 屯昌县| 兴义市| 壶关县| 民县| 特克斯县| 闵行区| 安平县| 神木县| 察隅县| 柘荣县| 来安县| 莱州市| 翁源县| 大港区| 海盐县| 无为县| 微山县| 芜湖市| 紫阳县| 泰顺县| 娄烦县| 嘉峪关市| 凤凰县| 松阳县| 太湖县| 清水河县| 清水县|