1. 程式人生 > >iOS開發——oc——founctation中常用結構體(NSRange、NSPoint\CGPoint、NSSize\CGSize、NSRect\CGRect)

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的同學有些許幫助!!!)

相關推薦

iOS開發——oc——founctation常用結構NSRangeNSPoint\CGPointNSSize\CGSizeNSRect\CGRect

          founcation中常用結構體 一、概述:    在foundation框架中,有一些關於位置和尺寸的結構體,在我們實際開發ios的時候會經常被使用到,所以這裡詳細講解下:    NSRange : 表示範圍    NSPoint\CGPoint

OC基礎-Foundation——常用結構 NSRange NSPointNSsizeNSRect

Oc為我們提供了四個結構體,定義的變數可以存在棧上和堆上。 分別是:範圍:NSRange , 幾體資料型別 : 點(NSPoint) 尺寸(NSsize) 區域(NSRect); ---------------------------------------------

黑馬程式設計師——Foundation框架——常用結構NSRangeNSPoint等

一,Foundation框架簡介: OC的Foundation框架包含了常用的類(所有類均是繼承自NSObject )和資料型別(結構體、列舉、等)。 路徑:/Applications/Xcode.app/Contents/Developer/Platforms/iPh

C 語言結構資料結構

結構體是在資料結構中經常使用的一類,下面對結構體進行一些知識的補充 結構體和陣列的區別 結構體的宣告 結構體宣告的基本形式 struct tag { member-list }variable-list; 引數解釋 tag:結構體的名字

Unity結構C#

usingUnityEngine; usingSystem.Collections; public class Foo { public Vector3 pos { get{ return _pos; } set{ _pos = value; } } private Vector3 _

常用結構NSRange用法

定義 NSRange在官方文件中如是定義:A structure used to describe a portion of a series—such as characters in a string or objects in an NSArray ob

iOS開發——OC常用的資料結構一覽。

一.     在iOS開發中常用的結構體 1.    NSRange-一個範圍結構體,location是位置,length是長度;{4,5},NSMakeRange(4,5);NSStringFromRange可以把它當NSString*返回 2.    NSSize

小白學開發iOSOC_ 經常使用結構2015-08-14

轉換成 tracking 小白 epo idt rgb 表示範圍 dsm tor // // main.m // 經常使用結構體 // // Created by admin on 15/8/13. // Copyright (c) 2015年 admin.

iOS 的視圖層次結構繼承關系及常用結構探討

typedef round tof 圖層 矩形 send 其它 mov uiscreen UIView表示屏幕上的一塊矩形區域,它在App中占有絕對重要的地位,因為IOS中幾乎所有可視化控件都是UIView的子類。負責渲染區域的內容,並且響應該區域內發生的觸摸事件

iOS基礎foundation常用結構

------ 知之部落格 期待與您交流! -------     在Foundation中定義了很多常用結構體型別來簡化我們的日常開發,這些結構體完全採用Objective-C定義,和我們自己定義的結構體沒有任何區別,之所以由框架為我們提供完全是為了簡化我們的開發。

iOS使用結構與位域,大小端資料轉換

如何在iOS中使用結構體資料型別 在定義結構體時,如果不涉及到OC中的物件時,可以直接將結構體當作成員變數屬性使用,一旦在結構中定義了OC中的物件,編譯會報錯,提示“ARC時禁止在結構體中定義OC的物件”,主要原因在於ARC無法管理結構體中的OC物件的生命週期以

C#結構與類的區別

nbsp display 分享 pan ron none 技術分享 初始 title (一) 語法定義上的區別,定義類使用關鍵字class 定義結構使用關鍵字struct (二) 在結構體中可以聲明字段,但是聲明字段的時候是不能給初始值的. C#中的結構體與類的區

NSString - - 常用結構與字符串之間的轉化打印時可用

code cgrect net 字符 cgpoint mst cnblogs cgp affine CGRect、CGSize、UIEdgeInsets、UIOffset、CGPoint、NSRange等 UIGeometry.h 1 NSString *NSStr

swift結構與nscoding

was dev 5% diy cts sco enc cool ngx %E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python%E4%B8%AD%E7%9A%84%E7%94%9F%E6%88%90%E5%99%A8 http://www.zc

程序通過定義學生結構變量,存儲學生的學號姓名和3門課的成績。函數fun的功能是:對形參b所指結構變量的數據進行修改,並在主函數輸出修改後的數據。

一次 數據 mod long 成績 nbsp data 例如 main 程序通過定義學生結構體變量,存儲學生的學號、姓名和3門課的成績。函數fun的功能是:對形參b所指結構體變量中的數據進行修改,並在主函數中輸出修改後的數據。例如,若b所指變量t中的學號、姓名和三門課的成績

ios開發之--UITableView的visibleCells的用法

.com format transform ati tableview bool deque property ons 先上圖: 具體代碼如下: #import "ViewController.h" @interface ViewController ()<

SylixOS時間結構探究

sylixos timeval 1. 相關名詞解釋1.1 什麽是timeval結構體 timeval結構體在SylixOS系統中的定義如程序清單1.1所示:程序清單1.1 timeval結構體定義struct timeval {time_t tv_sec;

ios開發之--NSStringsubstringFromIndex,substringWithRange,substringToIndex方法的使用

字符 nsrange min nbsp 範圍 clas ring div make 1,substringFromIndex 從索引0開發到到index的後面的字符 2,substringWithRange 取指定range裏面的字符,左邊為索引index,右邊為截取的範圍

iOS開發 UI庫的坑

製作UI庫中遇到編譯錯誤 file:///Users/lvshaohua/musicv/musicv/MVUPowerVUI/MVUPowerVUI/MVUCameraStoryboard.storyboard: error: IB Designa

☆ C/C++使用結構陣列->排序(姓名+學號+分數)

使用單鏈表進行排序見上一篇文章,這兩篇文章相輔相承;   傳送門:點我即達(。・ω・。)   ***********************************************************************************