2010-06-01 32 views
6

Đối mặt với một vấn đề khi khởi chạy ứng dụng theo hướng ngang cho IPad. Tôi đã phát triển ứng dụng IPhone mà sau này tôi chuyển sang IPad.Khởi chạy ứng dụng theo hướng ngang cho IPad

Tôi đã thực hiện thiết lập liên quan đến định hướng trong info.plist

[ UISupportedInterfaceOrientations~ipad ] to support all orientation UIInterfaceOrientationPortrait , UIInterfaceOrientationPortraitUpsideDown , UIInterfaceOrientationLandscapeLeft , UIInterfaceOrientationLandscapeRight. 

nhưng khi tôi bắt đầu ứng dụng IPad trong chế độ phong cảnh, nó luôn luôn bắt đầu ở chế độ potrait.

Cùng này

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

{ return YES; } 

giúp đỡ tôi, nếu tôi thiếu cái gì với điều này ..

Cảm ơn,

Sagar

+0

Nếu bạn đang xác định hỗ trợ cho mọi hướng thì lượt xem của bạn sẽ ở chế độ tương tự như thiết bị của bạn. ví dụ: Nếu thiết bị của bạn ở chế độ dọc thì chế độ xem của bạn sẽ được hiển thị ở chế độ dọc. Thay đổi hướng thiết bị cũng sẽ thay đổi hướng xem. – Jim

+0

Cảm ơn Jim đã trả lời .. nhưng tôi bắt đầu áp dụng khi định hướng ở chế độ ngang ... nó vẫn bắt đầu ở chế độ dọc (tức là theo hướng của nút trang chủ). Tôi cần đạt được định hướng thích hợp ngay từ đầu vì cần hiển thị màn hình ngang hoặc màn hình dọc. –

Trả lời

5

Sagar - Tôi đã cùng một vấn đề nhưng đã có thể để giải quyết nó.

Giống như ứng dụng của bạn, ứng dụng của tôi bắt đầu dưới dạng ứng dụng iPhone mà tôi đã "nâng cấp" lên ứng dụng Universal bằng trình hướng dẫn XCode. Tôi nhận thấy rằng khi chạy trên iPad thực tế, bắt đầu ở chế độ ngang, ứng dụng sẽ bắt đầu trong Portrait, sau đó có thể xoay sang Landscape. Trên trình mô phỏng, bắt đầu ở chế độ ngang, ứng dụng sẽ bắt đầu ở Chế độ ngang, sau đó trình mô phỏng sẽ xoay sang Chụp chân dung.

Trên iPad, ứng dụng của tôi là ứng dụng chia xem với TabBarControllers ở bên trái và bên phải. Mỗi tab là một bộ điều khiển xem trả về YES cho shouldAutoRotateToInterfaceOrientation.

Tôi nhận thấy rằng một trình thủ thuật mới tạo ra, trường hợp đơn giản với trình điều khiển chia nhỏ, ứng dụng toàn cầu không gặp sự cố này.

Sự khác biệt mà tôi tìm thấy giữa ứng dụng của mình và trường hợp đơn giản là tôi đã không thêm chế độ xem của bộ điều khiển chia tách của tôi vào cửa sổ ứng dụng trong applicationDidFinishLaunchingWithOptions. Thay vào đó, tôi đã hiển thị một khung nhìn "loading" ở giai đoạn này, sau đó khi một thread khởi tạo hoàn thành, tôi sẽ thêm view view của chế độ xem của tôi (và ẩn chế độ xem "loading").

Khi tôi thêm chế độ xem của chế độ xem chia nhỏ của tôi vào cửa sổ ứng dụng trong khi gọi đến applicationDidFinishLaunchingWithOptions, mọi thứ bắt đầu hoạt động tốt.

Phải có một số phép thuật xảy ra khi trở về từ applicationDidFinishLaunchingWithOptions ???

Ứng dụng của bạn có tương tự như ứng dụng của tôi ở chỗ nó không thêm chế độ xem của trình điều khiển chế độ xem chính vào cửa sổ trong suốt applicationDidFinishLaunchingWithOptions không?

+0

Xin chào TomSwift. Cảm ơn bạn đã trả lời .. Tôi đã thực hiện cùng một cách, như bạn đã mô tả. trong applicationDidFinishLaunchingWithOptions Tôi không thêm cửa sổ chính/infact Tôi thêm màn hình splash và sau đó splitview được thêm vào. –

+0

Vậy điều gì xảy ra nếu bạn thêm cửa sổ chính thay vì màn hình giật gân? Liệu nó có tự khắc phục không? – TomSwift

+0

Xem .. có vẻ như giải pháp cho điều này là trong applicationdidfinishlauching cho phép bắt đầu mặc định giao diện người dùng [trong trường hợp của tôi giật gân scree] và sau đó phát hiện định hướng và làm hiển thị xem .... –

9

Đặt UISupportedInterfaceOrientations vào trong -Info.plist của bạn, với cài đặt cho mỗi hướng bạn hỗ trợ. Điều này được sử dụng để xem định hướng mà ứng dụng có thể bắt đầu. Từ đó trở đi, nó sẽ hỏi bộ điều khiển xem của bạn.

+0

Cảm ơn David đã trả lời. Có cài đặt được thực hiện trong info.plist. –

10

Đây là điều tôi cũng đã khám phá: đặt hướng giao diện ban đầu trong info.plist của bạn đang bị bỏ qua nếu bạn đã định hướng giao diện được hỗ trợ được thiết lập với hướng khác trong vùng đầu tiên! Đặt định hướng ban đầu của bạn ở đó - và trình mô phỏng sẽ khởi chạy chính xác, cũng như ứng dụng. điều này đã khiến tôi phát điên trong một thời gian dài!

+0

Chính xác những gì tôi đang tìm kiếm ... – RVN

1

Như được chỉ ra trong một số bài đăng, bạn phải thiết lập info.plist với cả hướng được hỗ trợ và định hướng giao diện ban đầu.Tuy nhiên, vấn đề lớn hơn là khi định hướng ban đầu có hiệu lực? Câu trả lời là KHÔNG khi bộ điều khiển xem của bạn nhận được thông báo "viewDidLoad". Tôi thấy rằng trên iPad-1, chạy iOS 5.0, định hướng ban đầu được yêu cầu chỉ có hiệu lực sau khi nhận được một số thông báo "shouldAutorotateToInterfaceOrientation" . (Thông báo này chuyển thông số UIInterfaceOrientation cho người nhận.) Hơn nữa, ngay cả khi định hướng nói đang ở chế độ Phong cảnh, có thể không! Cách duy nhất tôi tìm thấy để đảm bảo rằng chế độ xem ở chế độ ngang là để kiểm tra xem chiều cao xem có nhỏ hơn chiều rộng xem hay không. Chiến lược làm việc cho tôi là bố trí các subView mà tôi muốn khi nhận được thông báo "viewDidLoad" nhưng trì hoãn thực sự thêm các subView đó vào view cho đến khi controller nhận được một thông báo "shouldAutorotate .." hợp lệ với định hướng được thiết lập là Chế độ phong cảnh. Mã trông giống như sau:

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
// Return YES for supported orientations 

// N.B. Even when the interface orientation indicates landscape mode 
// this may not really be true. So we insure this is so by testing 
// that the height of the view is less than the width 
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
    interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
{ 
    CGRect viewBounds = [[self view] bounds]; 
    if (viewBounds.size.height < viewBounds.size.width) 
     [self addMySubViews]; 
    return YES; 
} 
else 
    return NO; 
} 

Apple vừa phát hành iOS 5.1, vì vậy hành vi này có thể đã thay đổi. Nhưng tôi hy vọng mã ở đây vẫn hoạt động.

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