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》把
NSString *str2 = NSStringFromRange(range);
NSLog(@"%@",str2);
(3)、注意點
// 注意,如果字串不包含這個字串,location =NSNotFound==-1,length=0
NSRange range2 = [str rangeOfString:@"java"];
NSLog(@"location= %ld, length = %ld", range2.location , range2.length);// NSNotFound,使用ld輸出亂碼
NSLog(
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、原點、零尺寸、rect為0——》CGPointZero、CGRectZero、
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是否包含rect:CGRectContainsRect------------------------");
//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(@"--------------------rect和rect是否相交---------------------------------------------");
// CGRectIntersection判斷是否相交,並返回相交的部分,就算是一點相交都返回(如果不相交x和y為inf)
CGRect re = CGRectIntersection(CGRectMake(0, 0, 10, 10), CGRectMake(11, 11, 10, 10));//判斷是否相交,如果把相交
NSLog(@"是否相交:x = %.1f,y = %.1f,width= %.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 = %.1f,width= %.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判斷是否相交,如果相交就返回yes即1,邊點和邊線的相交都不成立,返回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中常用結構體(NSRange、NSPoint\CGPoint、NSSize\CGSize、NSRect\CGRect)
founcation中常用結構體 一、概述: 在foundation框架中,有一些關於位置和尺寸的結構體,在我們實際開發ios的時候會經常被使用到,所以這裡詳細講解下: NSRange : 表示範圍 NSPoint\CGPoint
OC基礎-Foundation——常用結構體 (NSRange 、NSPoint、NSsize、NSRect)
Oc為我們提供了四個結構體,定義的變數可以存在棧上和堆上。 分別是:範圍:NSRange , 幾體資料型別 : 點(NSPoint) 尺寸(NSsize) 區域(NSRect); ---------------------------------------------
黑馬程式設計師——Foundation框架——常用結構體(NSRange、NSPoint等)
一,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
小白學開發(iOS)OC_ 經常使用結構體(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開發之--NSString中substringFromIndex,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++中使用結構體陣列->排序(姓名+學號+分數)
使用單鏈表進行排序見上一篇文章,這兩篇文章相輔相承; 傳送門:點我即達(。・ω・。) ***********************************************************************************