2012-02-28 24 views
5

Trong trình xây dựng giao diện có một điều khiển trong thanh tra và thanh tra lò xo được gắn nhãn nguồn gốc. Điều này làm gì và tại sao thay đổi nó cho một đối tượng thay đổi nó cho tất cả các đối tượng?Điều khiển gốc xuất hiện trong trình tạo giao diện là gì?

Origin Control

Theo như tôi có thể nói nó không có bất kỳ tác thực về nguồn gốc khung hình chữ nhật như tên của nó. Hãy để tôi giải thích:

Chọn UILabel và thay đổi nguồn gốc ở trên cùng bên phải như trong ảnh ở trên đặt nguồn gốc khung tại điểm (280,11). Tuy nhiên, trong mã, khi bạn thực sự yêu cầu khung cho nguồn gốc của nó nó được cho là (211,11) tương ứng với góc trên bên trái của khung. Do đó, việc thay đổi nguồn gốc khung hình trong trình xây dựng giao diện dường như hoàn toàn không làm gì cả! Chuyện gì đang xảy ra ở đây?!

+0

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html – Nathan

+0

Nathan - đó là một tài liệu tuyệt vời mà tôi chưa từng thấy trước đây, nó không giải thích tại sao thay đổi trình tạo giao diện gốc IN không ảnh hưởng đến nguồn gốc thực tế của khung nhìn. –

Trả lời

7

Không có gì trừ khi bạn đang chỉnh sửa các trường liền kề với trường đó. Bạn sẽ lưu ý rằng các tọa độ X và Y thay đổi tùy thuộc vào điểm neo bạn chọn cho nó; điều đó có nghĩa là giúp bạn sắp xếp đối tượng dễ dàng hơn bằng trung tâm hoặc cạnh của nó.

Lý do thay đổi đối với tất cả các đối tượng là nó không thực sự ảnh hưởng đến bất kỳ thứ gì về chính đối tượng đó; hệ tọa độ "thực" vẫn giữ nguyên bất kể giá trị X và Y được hiển thị ở đó.

Trên OS X, như Nathan cho biết, hệ tọa độ có nguồn gốc ở dưới cùng bên trái và tọa độ của nó tăng lên và sang phải; trên iOS, nguồn gốc ở trên cùng bên trái và các tọa độ của nó tăng lên phía dưới và bên phải.

+0

Cảm ơn Noah! Đó là một sự xấu hổ mà bạn không thể thay đổi nó trong xây dựng giao diện bởi vì có một cái gì đó phát triển sang trái như trái ngược với quyền khi xác định chiều rộng là hữu ích cho các nhãn với văn bản động. –

+0

Đúng. Trong trường hợp đó, bạn thường có thể thoát khỏi việc có văn bản của nhãn phải căn chỉnh và nhãn đủ rộng để chứa độ dài tối đa của văn bản mà bạn mong đợi đặt vào đó. Tuy nhiên, nếu đó không phải là một tùy chọn, luôn có phương thức NSString '-sizeWithFont: constrainedToSize: lineBreakMode:'. –

3

tôi làm không phải bây giờ câu trả lời chính xác, nhưng tôi nghĩ rằng nó đã làm với mã nguồn gốc bạn đã đặt cho rằng đối tượng tương tự (chỉ là một ví dụ)

- (void) Button { 

     CGRect frame = button.frame; 
     frame.origin.x = 500; // new x coordinate 
     frame.origin.y = 500; // new y coordinate 
     button.frame = frame; 
} 

Và có lẽ đó là một cách để thiết lập frame.origin đến một khung cảnh đó sẽ kết nối nó với các công cụ có nguồn gốc trong InterFace Builder

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html

Cocoa sử dụng một hệ tọa độ Descartes như cơ bản của nó mô hình cho chỉ định tọa độ. Nguồn gốc của hệ thống này nằm ở góc dưới bên trái của không gian bản vẽ hiện tại , với các giá trị dương kéo dài dọc theo trục lên và sang phải của điểm xuất phát. Nguồn gốc xuất xứ cho toàn bộ hệ thống nằm ở góc dưới bên trái của màn hình có chứa thanh trình đơn.

Nếu bạn buộc phải vẽ tất cả nội dung của mình theo tọa độ màn hình, hệ thống tọa độ ở góc dưới bên trái màn hình chính của máy tính — mã của bạn sẽ khá phức tạp. Để đơn giản hóa mọi thứ, Cocoa thiết lập hệ tọa độ cục bộ có nguồn gốc bằng với nguồn gốc của cửa sổ hoặc chế độ xem sắp vẽ. Cuộc gọi vẽ tiếp theo bên trong cửa sổ hoặc chế độ xem diễn ra tương đối với hệ tọa độ cục bộ này. Khi mã kết thúc vẽ, Cocoa và hệ thống đồ họa bên dưới chuyển đổi tọa độ ở địa phương tọa độ trở lại tọa độ màn hình sao cho nội dung có thể là kết hợp với nội dung từ các ứng dụng khác và gửi đến phần cứng đồ họa .

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