[Câu hỏi được cập nhật]Cách thích hợp để phát hiện định hướng giao diện khi khởi chạy là gì?
Vì vậy, đây là vấn đề, tôi cuối cùng đã thu hẹp nó xuống này. Nếu bạn tạo một UIViewController mới trong tất cả các phương pháp
- (id)init;
- (void)loadView;
- (void)viewDidAppear:(BOOL)animated;
- (void)viewDidLoad;
(...)
Các interfaceOrientation giữa các ý kiến Portrait và nếu chế độ phong cảnh được phát hiện nó sẽ nhanh chóng xoay để định hướng đó. Mà sau đó có thể được phát hiện bằng cách sử dụng:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
Vấn đề là trên iPad, nó yên tĩnh khó khăn để chuẩn bị giao diện của bạn cho định hướng giao diện hiện tại trong loadView (hoặc một trong những người khác) vì nó sẽ chỉ trở lại Chân dung. Điều này sẽ gây ra một số sự cố:
1) Tôi muốn nội dung của mình tải lại ở chế độ cổng, nhưng KHÔNG ở chế độ ngang. Thông thường tôi sẽ đặt một câu lệnh if trong loadView. Nếu ở chế độ dọc, hãy tải lại nội dung. Nhưng trong trường hợp này, nó sẽ luôn trả về ảnh chân dung và do đó luôn tải nội dung.
2) Tôi muốn sử dụng 'presentPopoverFromRect: inView: allowedArrowDirections: animated:' - phương thức khi ở chế độ dọc sao cho nó sẽ tự động hiển thị menu popover khi ứng dụng bắt đầu. Điều này sẽ làm hỏng ứng dụng khi được khởi chạy ở chế độ dọc. Lý do: 'Popovers không thể được trình bày từ một cái nhìn mà không có một cửa sổ.'.
Giả định an toàn duy nhất nằm trong 'didRotateFromInterfaceOrientation: (UIInterfaceOrientation) fromInterfaceOrientation', nhưng phương pháp này sẽ không được kích hoạt nếu nó khởi chạy ở chế độ dọc.
// ----
Cập nhật (15.37)
'UIApplicationWillChangeStatusBarOrientationNotification'
Sẽ chỉ được đăng khi giao dịch hoán đổi sử dụng từ dọc sang ngang (hoặc vica lại). Nếu giao diện là vấn đề thì điều này có thể dễ dàng được giải quyết với quan sát cho rằng thông báo và
if (UIDeviceOrientationIsPortrait(interfaceOrientation)) {
// layout subviews for portrait mode
} else {
// layout subviews for landscape mode
}
Nhưng vấn đề là tôi muốn biết trong chế độ mà nó là lúc khởi động để xác định khá hay không tôi nên tải lại nội dung , Tôi không thể tải lại nội dung và khi nó hoán đổi sang phong cảnh, hãy hủy bỏ nó.
Tôi đã thử kiểm tra 'UIDeviceOrientationIsPortrait()' trong 'layoutSubviews' của lớp con' UIView' tùy chỉnh và tôi đang nhận định hướng chính xác. Bạn có thêm một số mã mà bạn có thể chia sẻ có thể giúp xác định vấn đề là gì không? Ngoài ra tự hỏi nếu UIDeviceOrientation và UIInterfaceOrientation giá trị có thể được nhận được sử dụng thay thế cho nhau? Điều đó đã khiến tôi bị mắc kẹt với các lỗi lạ trước đây. – justinkmunger