2010-11-18 41 views
8

Tôi có UIScrollView chứa UIImageView và tôi gặp một số rắc rối để có được hành vi đúng khi iPhone quay.Hình ảnh tỷ lệ để vừa với màn hình xoay vòng trên iPhone

Mục tiêu: tôi đang cố gắng để có được những điều sau khi đi từ dọc sang ngang:

_________ 
|AAAAAAA| 
|BBBBBBB|   _________________ 
|CCCCCCC|   |  AAAAAA  | 
|DDDDDDD| --> |  CCCCCC  | 
|EEEEEEE|   |  EEEEEE  | 
|FFFFFFF|   |_____GGGGGG_____| 
|GGGGGGG| 
--------- 

Ở đây toàn bộ hình ảnh trong giao diện chân dung được thu nhỏ để phù hợp với xem phong cảnh khi iPhone quay. Nó cũng là trung tâm. Tôi cũng đang cố gắng duy trì tỷ lệ khung hình. Tương tác của người dùng cũng được bật và người dùng có thể sử dụng toàn bộ màn hình để xoay/thu phóng hình ảnh.

Hiện nay tôi đã sau autoresizingMask trên scrollview:

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth | 
           UIViewAutoresizingFlexibleHeight);  

Nhưng điều này mang lại như sau

_________ 
|AAAAAAA| 
|BBBBBBB|   _________________ 
|CCCCCCC|   |AAAAAA   | 
|DDDDDDD| --> [BBBBBB   | 
|EEEEEEE|   [CCCCCC   | 
|FFFFFFF|   [DDDDDD__________| 
|GGGGGGG| 
--------- 

Thiết lập này bảo quy mô và bù đắp từ góc trên bên trái.

Câu hỏi: Có thể nhận hành vi này bằng cách sử dụng autoresizingMask phù hợp không? Nếu không, chúng ta nên thiết lập

scrollView.autoresizingMask = UIViewAutoresizingNone; 

và tự đặt zoomScalecontentOffset cho UIScrollView về luân chuyển. Nhưng, điều đó nên được thực hiện ở đâu? Điều gì về hoạt hình thay đổi đó?

Giải pháp: Bằng cách rất nhẹ thay đổi câu trả lời dưới đây tôi có các hành vi trên bằng vào mã bên dưới:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
            UIViewAutoresizingFlexibleHeight); 

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth 
            | UIViewAutoresizingFlexibleHeight); 

imageView.contentMode = UIViewContentModeScaleAspectFit; 
scrollView.contentMode = UIViewContentModeCenter; 

Trả lời

3

Hãy thử điều này:

scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
          UIViewAutoresizingFlexibleHeight);  
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
          UIViewAutoresizingFlexibleHeight); 

imageView.contentMode = UIViewContentModeAspectFit; // You could also try UIViewContentModeCenter 

Tôi không chắc chắn nếu imageView sẽ được tự động thay đổi kích thước trong UIScrollView, vì vậy nếu autoresizing không hoạt động, bạn có thể thử tự thiết lập khung hình xoay bằng với kích thước của scrollview.

+1

Cảm ơn bạn! Nhanh quá. Để có được hành vi đúng, tôi đã phải thay đổi một chút mã của chúng tôi (xem ở trên), nhưng điều này đặt tôi theo hướng trực tiếp. – user467225

+1

Không hoạt động ở tất cả –

-1

Tôi đã có một tình huống tương tự, một scrollView rất đơn giản với 3 imageViews ('trước đó', 'hiện tại' và 'tiếp theo') để hiển thị một loạt ảnh.

Các bức ảnh đều có kích thước cho iPad, nhưng là sự kết hợp giữa các hướng dọc và ngang. Tôi muốn chúng vừa với màn hình, (ví dụ: hộp thư nếu cần), với tỷ lệ khung hình được giữ lại. Tôi thấy tôi chỉ cần làm điều này với 3 imageViews để hoạt động:

imageView.contentMode = UIViewContentModeScaleAspectFit; 
Các vấn đề liên quan