首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C Foundation 框架常用結構體全解析:NSRange、NSPoint、NSSize、NSRect

     編輯:關於C語言

Foundation 幾何結構體概覽

Foundation 定義了一套獨立於 Core Graphics 的幾何結構體,用於描述範圍、點、尺寸、矩形,並提供構造函數與字符串轉換工具。常用於 UIKit/AppKit 交互前的純邏輯層計算。

四大核心結構體

結構體構造函數字段用途
NSRangeNSMakeRange(loc, len)location, length (NSUInteger)字符串/數組子範圍
NSPointNSMakePoint(x, y)x, y (CGFloat)二維坐標點
NSSizeNSMakeSize(w, h)width, height (CGFloat)寬高尺寸
NSRectNSMakeRect(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 等。

完整測試代碼

頭文件 FoundtionOftenStruct.h

#import 

@interface FoundtionOftenStruct : NSObject
- (void)testNsRange;   // NSRange 範圍查找
- (void)testNsPoint;   // NSPoint 點創建
- (void)testNsSize;    // NSSize 尺寸
- (void)testNsRect;    // NSRect 矩形
@end

實現文件 FoundtionOftenStruct.m

#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

主程序 main.m

#import "FoundtionOftenStruct.h"
#import 

int 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}

與 Core Graphics 互操作

  • NSPoint ≡ CGPoint,NSSize ≡ CGSize,NSRect ≡ CGRect(macOS/iOS 64 位下完全相同)。
  • 可直接互相賦值或傳遞給 CG 繪圖 API,無需轉換。
  • 跨平台代碼建議優先用 CGGeometry 類型,Foundation 類型僅用於純邏輯層。

常見操作 API

// 矩形運算
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 開發的基礎功力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved