2012-08-07 16 views
6

Tôi đã thấy sự thay thế này để sử dụng CGRectMake() để khởi một biến CGRect:CGRectMake thay thế

CGRect khung = (CGRect) {0,0,10,10};

Câu hỏi của tôi là, làm cách nào để CGRect frame = (CGRect){0,0,10,10}; hoạt động? Chuyện gì đang xảy ra đằng sau hậu trường? Dường như một mảng kiểu c đang được khởi tạo ({x,y,w,h}) mà sau đó được đúc thành cấu trúc CGRect - điều này có đúng không? Nếu vậy, làm thế nào là nó có thể đúc một mảng kiểu c như là một cấu trúc?

N.B. Tôi không yêu cầu nếu nó là thích hợp để sử dụng các thay thế trên để CGRectMake(), tôi chỉ muốn hiểu tại sao/làm thế nào nó hoạt động.

+0

Nó chỉ đơn giản hoạt động nếu hai câu lệnh tạo cùng một chuỗi các byte. Tuy nhiên, tôi nhầm lẫn rằng bạn đang sử dụng 0 và 10 thay vì 0.0 và 10.0. 0 và 10 sẽ được biên dịch dưới dạng hằng số nguyên và 0.0 và 10.0 sẽ xuất hiện các hằng số float/double. Tôi nghi ngờ rằng bạn có thể sử dụng phao như một khung pháp lý cho bất kỳ điều gì hữu ích. CGRect là một cấu trúc được làm bằng CGPoint và CGSize. Cả hai đều được làm bằng hai thành viên CGFload (x và y trong trường hợp của CGPoint và chiều rộng và chiều cao trong trường hợp CGSize). –

Trả lời

1

U có thể sử dụng như thế này:

CGRect rect = CGRectFromString(@"{{0, 0}, {612, 892}}"); // it contents { CGPoint origin;CGSize size;}; 
NSLog(@"rect : %@",NSStringFromCGRect(rect)); 
1

Kiểm tra này:

CGPoint origin = {10, 20}; 
CGSize size = {100, 200}; 
CGRect rect = {origin, size};