Foundation 定義了一套獨立於 Core Graphics 的幾何結構體,用於描述範圍、點、尺寸、矩形,並提供構造函數與字符串轉換工具。常用於 UIKit/AppKit 交互前的純邏輯層計算。
| 結構體 | 構造函數 | 字段 | 用途 |
|---|---|---|---|
NSRange | NSMakeRange(loc, len) | location, length (NSUInteger) | 字符串/數組子範圍 |
NSPoint | NSMakePoint(x, y) | x, y (CGFloat) | 二維坐標點 |
NSSize | NSMakeSize(w, h) | width, height (CGFloat) | 寬高尺寸 |
NSRect | NSMakeRect(x, y, w, h) | origin (NSPoint), size (NSSize) | 矩形區域 |
NSStringFromRange(range) → {loc, len}NSStringFromPoint(point) → {x, y}NSStringFromSize(size) → {w, h}NSStringFromRect(rect) → {{x, y}, {w, h}}對應解析函數:NSRangeFromString、NSPointFromString 等。
#import@interface FoundtionOftenStruct : NSObject - (void)testNsRange; // NSRange 範圍查找 - (void)testNsPoint; // NSPoint 點創建 - (void)testNsSize; // NSSize 尺寸 - (void)testNsRect; // NSRect 矩形 @end
#import "FoundtionOftenStruct.h"
@implementation FoundtionOftenStruct
- (void)testNsRange {
NSString *str = @"0,1,2,3,4,5,6,7,8,9";
NSRange range = [str rangeOfString:@",2,"];
if (range.length > 0)
NSLog(@"range is %@", NSStringFromRange(range)); // {3, 3}
}
- (void)testNsPoint {
NSPoint pt = NSMakePoint(10, 5); // 或 CGPointMake
NSLog(@"%@", NSStringFromPoint(pt)); // {10, 5}
}
- (void)testNsSize {
NSSize sz = NSMakeSize(10, 5);
NSLog(@"%@", NSStringFromSize(sz)); // {10, 5}
}
- (void)testNsRect {
NSRect rect = NSMakeRect(1, 3, 10, 20);
NSLog(@"%@", NSStringFromRect(rect)); // {{1, 3}, {10, 20}}
}
@end
#import "FoundtionOftenStruct.h" #importint main(int argc, const char *argv[]) { @autoreleasepool { FoundtionOftenStruct *obj = [[FoundtionOftenStruct alloc] init]; [obj testNsRange]; [obj testNsPoint]; [obj testNsSize]; [obj testNsRect]; } return 0; }
2015-06-04 15:12:56.567 range is {3, 3}
2015-06-04 15:12:56.582 {10, 5}
2015-06-04 15:12:56.586 {{1, 3}, {10, 20}}
2015-06-04 15:12:56.587 {10, 5}
NSPoint ≡ CGPoint,NSSize ≡ CGSize,NSRect ≡ CGRect(macOS/iOS 64 位下完全相同)。CGGeometry 類型,Foundation 類型僅用於純邏輯層。// 矩形運算 NSRect r1 = NSMakeRect(0,0,100,100), r2 = NSMakeRect(50,50,100,100); NSRect inter = NSIntersectionRect(r1, r2); // 交集 NSRect unionR = NSUnionRect(r1, r2); // 並集 BOOL contains = NSContainsRect(r1, r2); // 包含判斷 BOOL intersects = NSIntersectsRect(r1, r2); // 相交判斷 CGFloat dx = 10, dy = 20; NSRect offset = NSOffsetRect(r1, dx, dy); // 平移 NSRect inset = NSInsetRect(r1, 5, 5); // 內縮/外擴
掌握這四大結構體及其構造/轉換/運算 API,能大幅簡化佈局計算、碰撞檢測、文本範圍處理等邏輯代碼,是 ObjC/iOS/macOS 開發的基礎功力。