2010-01-27 38 views

Trả lời

19

Chúng giống nhau. This link có thêm thông tin. Đã sao chép ở đây để tham khảo nhanh:

CGRect là tương đương CoreGraphics NSRect.

Chúng được cố ý tạo cùng một bố cục trong bộ nhớ. Như vậy, nó được phép chuyển đổi một NSRect đến một CGRect bằng cách làm này:

CGRect cgrect = *(CGRect *)&nsrect; 

CoreGraphics cũng cung cấp một chức năng CGRectMake() mà hoạt động giống như NSMakeRect() (lưu ý sự đảo ngược của động từ và đối tượng trong tên) ngoại trừ nó trả về một CGRect.

+7

Vâng, được cho phép ngoại trừ việc nó phá vỡ các quy tắc bí danh nghiêm ngặt trong trình biên dịch. Tôi sẽ sửa trang wiki đó. Sử dụng NSRectFromCGRect và NSRectToCGRect để chuyển đổi. – Ken

+4

Trong 64 bit, hoặc khi bạn biên dịch với 'NS_BUILD_32_LIKE_64',' NSRect' được định nghĩa là 'CGRect', vì vậy bạn thậm chí không cần phải nhảy qua vòng tròn con trỏ. –

+0

không 'CGRect cgrect = (CGRect) nsrect;' làm điều tương tự? – Alexander

4

Đặc biệt, tôi tự hỏi về vị trí xuất xứ.

Điều đó tùy thuộc vào nơi bạn đã trực tiếp và nơi bạn đang sử dụng. Nói chung, Core Graphics và UIKit sử dụng các tọa độ lộn ngược (xuất phát ở góc trên bên trái, y dương đi xuống), trong khi AppKit sử dụng các tọa độ chưa được nhúng (gốc thấp hơn bên trái, y dương). Nhưng có thể lật hoặc unflip phối hợp từ mỗi API, và một số lớp học, chẳng hạn như NSImage và NSView, làm cho nó rất dễ dàng để làm như vậy.

+0

Khi tôi đọc câu hỏi của mình, đầu tiên tôi nghĩ có lẽ ông đang nói đến cách bố trí bộ nhớ; tức là, liệu bù đắp ("vị trí", trong ngôn ngữ của anh) của thành viên '.origin' (và do đó,' .size' quá tất nhiên) là giống nhau trên cả hai cấu trúc. Tuy nhiên, như ai đó đã chỉ ra ở trên, hai người được đảm bảo có cùng bố cục bộ nhớ. –

Các vấn đề liên quan