2008-08-02 37 views
88

Lưu ý: câu hỏi này là từ năm 2008 và hiện tại chỉ là sở thích lịch sử.Ứng dụng iPhone ở chế độ ngang, các hệ thống 2008


Cách tốt nhất để tạo ứng dụng iPhone chạy ở chế độ ngang từ đầu, bất kể vị trí của thiết bị là gì?

Cả hai chương trình và sử dụng Trình tạo giao diện.

+5

Đối với bất kỳ độc giả nào trong tương lai, xin lưu ý rằng vấn đề nổi tiếng này ** hiện được SOLVED của Apple ** kể từ năm 2011. Lưu ý dự án thử nghiệm trong câu trả lời bên dưới. – Fattie

Trả lời

46

Chỉ câu trả lời lịch sử. Hoàn toàn lạc hậu:

Xin lưu ý rằng câu trả lời này hiện đã hết hạn.

Bài đăng này là chỉ có một sự tò mò lịch sử.


Tin thú vị! Theo phát hiện của Andrew dưới đây, vấn đề này đã được cố định bởi Apple trong 4.0+.

Có vẻ như KHÔNG còn cần thiết để buộc kích thước của chế độ xem trên mỗi chế độ xem và vấn đề nghiêm trọng cụ thể về cảnh quan "chỉ làm việc lần đầu tiên" đã được giải quyết.

Tính đến tháng 4 năm 2011, bạn không thể kiểm tra hoặc thậm chí xây dựng bất cứ điều gì dưới 4.0, do đó, câu hỏi hoàn toàn là một sự tò mò lịch sử. Thật không thể tin được bao nhiêu rắc rối nó gây ra các nhà phát triển quá lâu!


Đâ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, vì các hệ thống này thậm chí không thể hoạt động được.


TÁC DỤNG PHẢI TUYỆT ĐỐI để làm việc này hoàn toàn - có ít nhất ba vấn đề/lỗi khi chơi.

thử này .. interface builder landscape design

Lưu ý đặc biệt mà nơi nó nói "và bạn cần phải sử dụng đúng cách shouldAutorotateToInterfaceOrientation ở khắp mọi nơi" nó có nghĩa là ở khắp mọi nơi, tất cả các quan điểm 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 nhở quan trọng của vấn đề BỔ SUNG nổi tiếng trong tầm tay ở đây: nếu bạn đang cố gắng trao đổi giữa HƠN MỘT view (tất cả phong cảnh), nó đơn giản không VIỆC. Nó là điều cần thiết để nhớ điều này hoặc bạn sẽ lãng phí ngày về vấn đề này. Đó là nghĩa đen KHÔNG THỂ. Đây là lỗi mở, được biết đến nhiều nhất trên nền tảng iOS. Có nghĩa đen không có cách nào để làm cho phần cứng làm cho xem thứ hai bạn tải, được cảnh quan. Việc 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 tầm thường tổng UIViewController mà không có gì ngoài việc ngồi đó và cho phép bạn trao đổi giữa các quan điểm của bạn.

Nói cách khác, trong iOS vì một lỗi bí quyết chính:

[window addSubview:happyThing.view]; 
[window makeKeyAndVisible]; 

Bạn có thể làm điều đó một lần duy nhất. Sau đó, nếu bạn cố gắng loại bỏ happyThing.view, và thay vào đó đặt vào đó newThing.view, CNTT KHÔNG LÀM VIỆC - VÀ R THNG R THNG.Máy sẽ không bao giờ xoay chế độ xem thành ngang. Không có sửa chữa lừa, thậm chí Apple không thể làm cho nó hoạt động. Cách giải quyết bạn phải áp dụng là có một UIViewController tổng thể mà chỉ đơn giản là ngồi đó và chỉ giữ quan điểm khác nhau của bạn (happyThing, newThing, vv). Hy vọng nó giúp!

+2

Tôi tin rằng điều này đã được khắc phục trong 4.x. Chúng tôi đã chuyển một trò chơi có nhiều màn hình khác nhau, một số cảnh quan và một số bức chân dung, và nó không hoạt động trong 3.x. Không muốn để có được vào xem giả thêm để xử lý nó, chúng tôi thay vì yêu cầu 4.x - trong đó, một năm sau khi câu hỏi này đã được hỏi, có lẽ là OK. – AndrewS

+0

Chúng tôi đã không làm "luôn luôn phong cảnh" nhưng khá phong cảnh khác nhau hoặc chân dung. Mỗi VC được thêm trực tiếp vào và xóa khỏi cửa sổ. Ứng dụng khởi chạy cảnh quan, vẫn như vậy thông qua một số chuyển tiếp màn hình. Chúng tôi không sử dụng chế độ xem giả, nhưng chúng tôi KHÔNG ghi đè nênTự động trong mọi màn hình. Không gặp sự cố nào trên 4.x, từ chạm tới bàn phím đến điện thoại. – AndrewS

40

Từ Dev trang web của Apple:

Để bắt đầu ứng dụng của bạn trong phong cảnh chế độ để các thanh trạng thái là ở vị trí thích hợp ngay lập tức, chỉnh sửa tập tin Info.plist của bạn để thêm phím UIInterfaceOrientation với giá trị thích hợp (UIInterfaceOrientationLandscapeRight hoặc UIInterfaceOrientationLandscapeLeft), như thể hiện trong Liệt kê 2.

Liệt kê 2: Bắt đầu từ ứng dụng của bạn trong chế độ phong cảnh

<key>UIInterfaceOrientation</key> 
<string>UIInterfaceOrientationLandscapeRight</string> 
+5

Điểm cộng này trong phương thức shouldAutorotateToInterfaceOrientation của bạn (interfaceOrientation! = UIInterfaceOrientationPortrait); và bạn đã hoàn tất. – mbehan

+5

Câu hỏi hỏi cách khởi động thiết bị ở chế độ ngang. Câu trả lời cung cấp thông tin đó. Định hướng xử lý sau đó không được đề cập trong câu hỏi. +1 Michael Pryor –

+1

Hấp dẫn, "câu trả lời" sẽ thực tế KHÔNG khởi động thiết bị ở chế độ ngang - !! Nó có lẽ là lỗi/khó khăn nổi tiếng nhất trong tất cả môi trường Apple. Đó là một cơ bản cho nhà phát triển iPad rất làm việc! – Fattie

6

của sasb và trả lời michaelpryor dường như là đúng, nhưng nếu nó không làm việc cho 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 số window makeKeyAndVisible; trước tiên.

Một số liên kết: Developing in landscape mode, iPhone SDK: How to force Landscape mode only?

@Robert: vui lòng tham khảo The iPhone SDK, NDA, and Stack Overflow.

4

Hướng dẫn lập trình hệ điều hành iPhone mới nhất có 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 ...

  • thiết lập các thuộc tính Info.plist (điều này thay đổi vị trí của thanh trạng thái, nhưng không phải là quan điểm)
  • xoay góc nhìn của bạn bằng tay xung quanh trung tâm của nó, ở hai UIViewController viewDidLoad của bạn: Phương pháp hay applicationDidFinishLaunching của bạn: phương pháp hoặc thực hiện tự động xoay vòng ("Autoresizing hành vi", trang 124)

Look cho "ra mắt trong Landscape Mode", trang 102.

7

Trước tiên tôi đặt trong thông tin.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 quan điểm trong giao diện Builder trong chế độ phong cảnh.

27

Tóm tắt và tích hợp từ tất cả các bài đăng, sau khi tự mình thử nghiệm; kiểm tra bản cập nhật cho 4.x, 5.x dưới đây.

Kể từ 3.2 bạn không thể thay đổi hướng của ứng dụng đang chạy từ mã.

Nhưng bạn có thể bắt đầu một ứng dụng có định hướng cố định, mặc dù thực hiện điều này không đơn giản.

Hãy thử với công thức này:

  1. thiết lập định hướng của bạn để UISupportedInterfaceOrientations trong Info.plist tập tin
  2. trong cửa sổ của bạn xác định một "điều khiển xem cơ sở" 480x320. Mỗi chế độ xem khác sẽ được thêm dưới dạng chế độ xem phụ cho chế độ xem của nó.
  3. trong tất cả các bộ điều khiển xem thiết lập các phương pháp shouldAutorotateToInterfaceOrientation: (để trả về giá trị tương tự như bạn định nghĩa trong plist, tất nhiên)
  4. trong tất cả các bộ điều khiển xem thiết lập một cái nhìn nền với

    self.view.frame = CGRectMake(0, 0, 480, 320)

    trong phương pháp viewDidLoad.

Cập nhật (iOS 4.x, 5.x): các Hướng dẫn lập trình Apple iOS App có một "ra mắt trong Landscape Mode" đoạn trong "Advanced App Tricks" chương.

Tài liệu tham khảo:

+1

Tôi có thể xác nhận đây là giải pháp duy nhất, thực sự hoạt động (với một bổ sung nhỏ). Tôi mất nhiều giờ để tìm và đánh giá điều này. Tất cả các câu trả lời khác chỉ là một phần giải pháp cho vấn đề. –

+0

Tôi thích cách liên kết đến câu hỏi SO liên kết quay lại ngay câu hỏi này. –

+0

Ty Richard, liên kết lặp đã bị xóa – IlDan

5

Tôi ngạc nhiên không ai có thể đưa ra câu trả lời này chưa:

Trong tất cả các thử nghiệm của tôi khi gạt bỏ một phương thức bộ điều khiển xem hướng ưa thích của bộ điều khiển chế độ xem cha được đặt trong shouldAutorotateToInterfaceOrientation được tôn trọng ngay cả khi một phần của UINavi gationController. Vì vậy, giải pháp cho việc này rất đơn giản:

Tạo UIViewController giả với UIImageView cho nền. Đặt hình ảnh thành hình ảnh mặc định.png ứ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, chỉ trình bày bộ điều khiển chế độ xem giả không có hoạt ảnh.

khi viewDidAppear được gọi trong bộ điều khiển chế độ xem giả của bạn, loại bỏ bộ điều khiển chế độ xem bằng hình ảnh động hòa tan chéo đẹp.

Nó không chỉ hoạt động, nhưng có vẻ tốt!BTW, chỉ cần làm rõ tôi làm xem gốc điều khiển của viewWillAppear như thế này:

- (void)viewWillAppear:(BOOL)animated 
{ 
if (dummy != nil) { 
    [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
    [self presentModalViewController:dummy animated:NO]; 
    [dummy release]; 
    dummy = nil; 
} 
... 
} 
3

Xem câu trả lời này: Landscape Mode ONLY for iPhone or iPad

  1. thêm định hướng đến plist
  2. shouldAutorotateToInterfaceOrientation = YES trong tất cả các file

Mặc dù nếu bạn đang sử dụng các chế độ hỗn hợp, bạn có thể nên tắt với

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 
Các vấn đề liên quan