Xin lưu ý rằng câu hỏi này có từ năm 2008 và bây giờ chỉ được quan tâm trong lịch sử.
Cách tốt nhất để tạo một ứng dụng iPhone chạy ở chế độ ngang ngay từ đầu, bất kể vị trí của thiết bị là gì?
Cả lập trình và sử dụng Trình tạo giao diện.
Xin lưu ý rằng câu hỏi này có từ năm 2008 và bây giờ chỉ được quan tâm trong lịch sử.
Cách tốt nhất để tạo một ứng dụng iPhone chạy ở chế độ ngang ngay từ đầu, bất kể vị trí của thiết bị là gì?
Cả lập trình và sử dụng Trình tạo giao diện.
Câu trả lời:
Xin lưu ý rằng câu trả lời này hiện đã rất lỗi thời /
Câu trả lời này chỉ là một sự tò mò lịch sử .
Tin tức thú vị! Theo phát hiện của Andrew dưới đây, vấn đề này đã được Apple khắc phục trong 4.0+.
Có vẻ như KHÔNG còn cần thiết phải ép buộc kích thước của chế độ xem trên mọi chế độ xem nữa và vấn đề nghiêm trọng cụ thể về cảnh quan "chỉ hoạt động lần đầu tiên" đã được giải quyết.
Kể từ tháng 4 năm 2011, không thể thử nghiệm hoặc thậm chí xây dựng bất kỳ thứ gì dưới 4.0, vì vậy câu hỏi hoàn toàn là một sự tò mò lịch sử. Thật không thể tin được nó đã gây ra bao nhiêu rắc rối cho các nhà phát triển trong một thời gian dài!
Đây là cuộc thảo luận và giải pháp ban đầu. Điều này hoàn toàn không liên quan bây giờ, vì những hệ thống này thậm chí không thể hoạt động.
Thật là CỰC KỲ KHÓ KHĂN để làm cho công việc này hoạt động đầy đủ - có ít nhất ba vấn đề / lỗi khi chơi.
thử cái này .. thiết kế cảnh quan trình tạo giao diện
Đặc biệt lưu ý rằng nơi nó nói "và bạn cần sử dụng shouldAutorotateToInterfaceOrientation đúng cách ở mọi nơi", nó có nghĩa là ở mọi nơi, tất cả các chế độ xem toàn màn hình của bạn.
Hy vọng nó sẽ giúp trong cơn ác mộng này!
Một lời nhắc quan trọng về vấn đề BỔ SUNG nổi tiếng hiện có ở đây: nếu bạn đang cố gắng hoán đổi giữa HƠN MỘT chế độ xem (tất cả chế độ xem), NÓ ĐƠN GIẢN KHÔNG HOẠT ĐỘNG . Cần phải nhớ điều này nếu không bạn sẽ lãng phí nhiều ngày cho vấn đề. Nó đúng là KHÔNG CÓ KHẢ NĂNG. Đây là lỗi mở lớn nhất được biết đến trên nền tảng iOS. Theo nghĩa đen, không có cách nào khiến phần cứng làm cho chế độ xem thứ hai mà bạn tải, trở nên ngang. Cách giải quyết khó chịu nhưng đơn giản và những gì bạn phải làm là có một UIViewController bậc thầy tầm thường không làm gì khác ngoài việc ngồi đó và cho phép bạn hoán đổi giữa các chế độ xem của mình.
Nói cách khác, trong iOS do một lỗi lớn cần biết:
[window addSubview:happyThing.view];
[window makeKeyAndVisible];
Bạn chỉ có thể làm điều đó một lần . Sau đó, nếu bạn cố gắng xóa happyThing.view và thay vào đó đặt newThing.view, nó KHÔNG hoạt động - VÀ ĐÓ LÀ ĐÓ. Máy sẽ không bao giờ xoay chế độ xem sang ngang. Không có cách sửa lỗi nào, ngay cả Apple cũng không thể làm cho nó hoạt động. Cách giải quyết mà bạn phải áp dụng là có một UIViewController tổng thể chỉ đơn giản là nằm ở đó và chỉ giữ các chế độ xem khác nhau của bạn (happyThing, newThing, v.v.). Hy vọng nó giúp!
Từ Trang web Nhà phát triển của Apple:
Để khởi động ứng dụng của bạn ở chế độ ngang để thanh trạng thái ở vị trí thích hợp ngay lập tức, hãy chỉnh sửa tệp Info.plist của bạn để thêm khóa UIInterfaceOrientation với giá trị thích hợp (UIInterfaceOrientationLandscapeRight hoặc UIInterfaceOrientationLandscapeLeft), như được hiển thị trong Liệt kê 2.
Liệt kê 2: Khởi động ứng dụng của bạn ở chế độ ngang
<key>UIInterfaceOrientation</key> <string>UIInterfaceOrientationLandscapeRight</string>
Tóm tắt và tích hợp từ tất cả các bài đăng, sau khi tự mình kiểm tra; kiểm tra bản cập nhật cho 4.x, 5.x bên dưới.
Kể từ 3.2, bạn không thể thay đổi hướng của một ứng dụng đang chạy từ mã.
Nhưng bạn có thể bắt đầu một ứng dụng với một hướng cố định, mặc dù làm như vậy điều này không đơn giản.
Hãy thử với công thức này:
UISupportedInterfaceOrientations
trong Info.plist
tệpshouldAutorotateToInterfaceOrientation:
phương thức (tất nhiên là để trả về cùng một giá trị mà bạn đã xác định trong plist)trong tất cả các bộ điều khiển chế độ xem, hãy đặt chế độ xem nền với
self.view.frame = CGRectMake(0, 0, 480, 320)
trong viewDidLoad
phương pháp.
Cập nhật (iOS 4.x, 5.x) : Hướng dẫn lập trình ứng dụng Apple iOS có đoạn "Khởi chạy ở chế độ ngang" trong chương "Thủ thuật ứng dụng nâng cao".
Người giới thiệu:
Đầu tiên tôi đặt trong info.plist
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
sau đó tôi đặt mã này trong applicationDidFinishLaunching:
CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
[window setTransform:rotate];
CGRect contentRect = CGRectMake(0, 0, 480, 320);
window.bounds = contentRect;
[window setCenter:CGPointMake(160.0f, 240.0f)];
Bằng cách này, tôi có thể làm việc trên chế độ xem trong Trình tạo giao diện ở chế độ ngang.
Câu trả lời của sasb và michaelpryor dường như đúng, nhưng nếu nó không phù hợp với bạn, hãy thử thay thế này:
- (void)applicationDidFinishLaunchingUIApplication *)application {
application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}
Hoặc cái này:
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Hoặc cái này:
[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];
Bạn cũng có thể phải gọi điện window makeKeyAndVisible;
trước.
Một vài liên kết: Phát triển ở chế độ ngang , iPhone SDK: Làm cách nào để chỉ buộc chế độ Ngang?
@Robert: vui lòng tham khảo SDK iPhone, NDA và Stack Overflow .
Tôi ngạc nhiên là chưa có ai đưa ra câu trả lời này:
Trong tất cả các thử nghiệm của tôi khi loại bỏ bộ điều khiển chế độ xem phương thức, định hướng ưu tiên của bộ điều khiển chế độ xem chính được đặt trong đó shouldAutorotateToInterfaceOrientation
được thực hiện ngay cả khi là một phần của UINavigationController. Vì vậy, giải pháp cho điều này rất đơn giản:
Tạo một UIViewController giả với một UIImageView cho nền. Đặt hình ảnh thành hình ảnh default.png mà ứng dụng của bạn sử dụng khi khởi động.
Khi viewWillAppear
được gọi trong bộ điều khiển chế độ xem gốc của bạn, chỉ cần trình bày bộ điều khiển chế độ xem giả mà không có hoạt ảnh.
khi viewDidAppear
được gọi trong bộ điều khiển chế độ xem giả của bạn, hãy loại bỏ bộ điều khiển chế độ xem bằng hoạt ảnh hòa tan chéo đẹp mắt.
Điều này không chỉ hoạt động, nhưng nó trông tốt! BTW, chỉ để làm rõ, tôi làm bộ điều khiển chế độ xem gốc viewWillAppear
như thế này:
- (void)viewWillAppear:(BOOL)animated
{
if ( dummy != nil ) {
[dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentModalViewController:dummy animated:NO];
[dummy release];
dummy = nil;
}
...
}
Hướng dẫn lập trình hệ điều hành iPhone mới nhất có một phần đầy đủ về điều này, với mã mẫu. Tôi chắc chắn đây là một bổ sung gần đây, vì vậy có thể bạn đã bỏ lỡ nó. Nó giải thích tất cả các điều kiện bạn phải tuân thủ; về cơ bản...
Tìm "Khởi chạy ở Chế độ ngang", trang 102.
Xem câu trả lời này: Chế độ ngang CHỈ dành cho iPhone hoặc iPad
Mặc dù nếu bạn đang sử dụng các chế độ hỗn hợp, bạn có thể tốt hơn với
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];