Bất cứ ai có thể cho tôi giải thích chi tiết về lý do tại sao iOS xử lý định hướng ngang của nó theo cách nó liên quan đến khung và chuyển đổi?iOS Landscape Orientation xử lý hậu trường
Những gì tôi đang nói về là hành vi này sau hiển thị bằng cách đăng nhập mô tả quan điểm trong các phương pháp Xem Vòng đời khác nhau:
viewDidLoad: "UIView: 0x1edb5ba0; frame = (0 0; 568 320); autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
viewWillAppear: "UIView: 0x1edb5ba0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
viewDidAppear: "UIView: 0x1edb5ba0; frame = (0 0; 320 568); transform = [0, 1, -1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
Các hậu quả của việc này là tinh tế, nhưng rất hấp dẫn.
Ví dụ, tôi khởi động ứng dụng của tôi với Định hướng giao diện ban đầu, và được hỗ trợ giao diện Định hướng cả hai thiết lập để "Landscape (nút home bên phải)"
tôi sau đó hiển thị rootViewController của tôi như thế này:
self.viewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
self.window.rootViewController = self.viewController;
This .xib có định hướng là Landscape và frame được đặt là 0, 0, 568, 320. Nó hiển thị chính xác và tôi có thể chạm vào tất cả các điểm trên màn hình.
Vấn đề sau đó đến khi tôi trình bày một subview như vậy:
SomeView *someView = [[SomeView alloc] initWithFrame:self.view.frame];
[self.view addSubview:someView];
Tại thời điểm này trong thời gian, self.view.frame được báo cáo là (0 0; 320 568) và self.view.transform được báo cáo là biến = [0, 1, -1, 0, 0, 0]. Kịch bản trường hợp tốt nhất, kết quả cuối cùng là tôi chỉ có thể chạm vào 320px bên trái của chế độ xem mà tôi vừa mới hiển thị, trường hợp xấu nhất là bố cục của chế độ xem bị tàn sát.
Nhờ câu hỏi SO khác nhau, tôi đã học được rằng cách thích hợp để làm điều này là như sau:
SomeView *someView = [[SomeView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:someView]
Những gì tôi đã không biết là tại sao, và tôi rất tò mò về điều đó.
Điều mà tôi thậm chí còn tò mò hơn là lý do chế độ xem được điều chỉnh theo cách thức trong quá trình khởi tạo và hiển thị.
Đã khá lâu rồi vì tôi đã bị rối với ứng dụng chỉ dành cho cảnh quan, nhưng vì một lý do nào đó tôi nghĩ việc triển khai thực hiện điều này khác với các phiên bản iOS cũ hơn, có đúng không?