2012-06-04 35 views
5

Tôi muốn có thể xử lý các thay đổi định hướng trong ứng dụng iPhone hiện tại của mình. Vấn đề là tôi không muốn quan điểm của bộ điều khiển của tôi để xoay hoặc thay đổi kích cỡ. Khi định hướng thiết bị thay đổi, tôi chỉ muốn một phần tử giao diện người dùng xoay 90 độ trên màn hình.Khi thiết bị iOS xoay, làm cách nào để thay đổi hướng chỉ một phần tử?

Ứng dụng máy ảnh của Apple là một ví dụ hoàn hảo về điều này - khi hướng thiết bị thay đổi, tất cả các nút xoay, nhưng chính chế độ xem không xoay.

Tôi cho rằng tôi chỉ có thể thay đổi kích thước chế độ xem, di chuyển tất cả các phần tử của tôi xung quanh và sau đó tạo hoạt ảnh cho các nút, nhưng tôi cảm thấy phải có cách dễ dàng hơn để thực hiện.

Xin cảm ơn trước.

Trả lời

5

1) Bạn có thể tạo 2 phân cấp xem và thay đổi đó là trên màn hình trong willRotateToInterfaceOrientation: see this question

2) Hoặc bạn có thể tự xoay tất cả các vòng quay see this question

+1

Phương án 2 hoàn hảo.Cám ơn đã chỉ tôi hướng đi đúng. Tôi gặp khó khăn khi tìm ra cái đó vì một lý do nào đó. Tôi đánh giá cao bài viết của bạn và mã mẫu. Tuyệt vời!! – tnbeatty

+0

@tnbeatty Tôi đã chỉnh sửa câu trả lời được tham chiếu, vì nó xử lý một số giá trị của UIDeviceOrientation không chính xác – Jiri

2

Bạn có thể sử dụng

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
if(interfaceOrientation==UIInterfaceOrientationPortrait || interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) 
    { 
     //Change frames as per orientations 
    } 

    else 
    {  
      //Change frames as per orientations 
    } 


    return NO; 
    } 

và dựa trên định hướng tự đặt các khung trong những yếu tố giao diện người dùng bạn muốn thay đổi. bạn có thể truy cập tất cả hướng từ mục Constants của this doc.

EDIT: Bạn có thể sử dụng NSNotification cho vấn đề này.

UIApplicationDidChangeStatusBarOrientationNotification 

văn khi định hướng giao diện người dùng của ứng dụng thay đổi.

Từ điển userInfo chứa đối tượng NSNumber đóng gói giá trị UIInterfaceOrientation (xem UIInterfaceOrientation). Sử dụng UIApplicationStatusBarOrientationUserInfoKey để truy cập giá trị này Availability

Available in iOS 2.0 and later. 

khai báo trong UIApplication.h

+0

Đây là một ý tưởng hay - đó là những gì tôi đã thử trước tiên. Vấn đề là: Giả sử thiết bị khởi động trong UIInterfaceOrientationPortrait. Nếu người dùng chuyển thiết bị sang UIInterfaceOrientationLandscapeLeft, tôi có thể phát hiện thay đổi đó và sau đó thay đổi khung. Nếu người dùng sau đó quay trở lại UIInterfaceOrientationPortrait, phương thức này sẽ không được gọi. – tnbeatty

+0

Thats thú vị, trong experiance của tôi, thói quen này được gọi là mỗi vòng quay (true) xảy ra. – trumpetlicks

+1

Tôi nên làm rõ: Trong bình luận trước đây của tôi, -shouldAutorotateToInterfaceOrientation sẽ không được gọi vì định hướng thiết bị không bao giờ thực sự bị thay đổi. Do đó, điện thoại nghĩ rằng nó đang ở chế độ Chân dung và sẽ không gọi phương thức này khi thiết bị thay đổi về chân dung. Điều đó có ý nghĩa? – tnbeatty

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