Có sự khác biệt nào giữa CGRect
và NSRect
không? Đặc biệt, tôi tự hỏi về vị trí của nguồn gốc. Có bất kỳ sự khác biệt quan trọng nào tôi cần biết không?Có sự khác biệt nào giữa CGRect và NSRect không?
Trả lời
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 CoreGraphicsNSRect
.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ộtCGRect
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ộtCGRect
.
Đặ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.
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ớ. –
- 1. Làm thế nào để NSRect và CGRect là các loại không tương thích?
- 2. Có sự khác biệt nào giữa RPC và IPC không?
- 3. Có sự khác biệt nào giữa MsgBox và MessageBox.Show không?
- 4. Có sự khác biệt nào giữa! == và! = Trong PHP không?
- 5. Có sự khác biệt nào giữa log4net.Config.BasicConfigurator.Configure() và log4net.Config.XmlConfigurator.Configure() không?
- 6. Có sự khác biệt nào giữa gluLookAt() và glFrustum() không?
- 7. Có sự khác biệt nào giữa `ListView.invalidateViews()` và 'Adapter.notifyDataSetChanged()' không?
- 8. Có sự khác biệt nào giữa System.Windows.Clipboard và System.Windows.Forms.Clipboard không?
- 9. Sự khác biệt giữa ". +" Và ". +?"
- 10. Sự khác biệt giữa $ * và $ @
- 11. Sự khác biệt giữa "**/* /" và "** /"?
- 12. Sự khác biệt giữa = và: =
- 13. Sự khác biệt giữa $ (...) và `...`
- 14. Sự khác biệt giữa. và #
- 15. Có sự khác biệt nào giữa '=' và Trong?
- 16. Có sự khác biệt nào giữa chỉ đọc và {get; }
- 17. Có sự khác biệt nào giữa UITableViewCellAccessoryDetailDisclosureButton và UITableViewCellAccessoryDisclosureIndicator
- 18. Có sự khác biệt nào giữa "center_horizontal | center_vertical" và "center"
- 19. Có sự khác biệt nào giữa cpython và python
- 20. có sự khác biệt giữa/mnt/sdcard và/sdcard không?
- 21. Sự khác biệt giữa Đơn vị và Không có gì?
- 22. "URL có WWW và URL không có WWW" -Có sự khác biệt nào giữa chúng không?
- 23. Có sự khác biệt về sự khác biệt nào giữa tuần tự hóa nhị phân và XML không?
- 24. Sự khác biệt giữa os.getenv và os.environ.get?
- 25. Sự khác biệt giữa 'DateTime' và 'DateTimeOffset'
- 26. Sự khác biệt giữa SSLCACertificateFile và SSLCertificateChainFile
- 27. Sự khác biệt giữa $ VARIABLE và $ {VARIABLE}
- 28. Sự khác biệt giữa oracle.jdbc.xa.client.OracleXADataSource và oracle.jdbc.pool.OracleDataSource
- 29. Sự khác biệt giữa GetDC() và BeginPaint()
- 30. Sự khác biệt giữa styles.xml và themes.xml
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
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ỏ. –
không 'CGRect cgrect = (CGRect) nsrect;' làm điều tương tự? – Alexander