2011-09-11 29 views
5

Các bản xem phụ của tôi có bố cục khác nhau khi ở hướng dọc và ngang. Bố trí dựa trên khung của superview, và không tầm thường (không thể đạt được bằng cách sử dụng autoresizing springs và struts).Nhận khung chính xác bên trong willRotateToInterfaceOrientation

Vấn đề là nếu tôi đang thay đổi khung của subViews trong willRotateToInterfaceOrientation, hoạt ảnh là chính xác, nhưng khung là superView vẫn là khung từ hướng cũ.

Nếu tôi đang thay đổi subViews trong didRotateFromInterfaceOrientation, khung là superView thực sự là đúng, nhưng thay đổi khung hình chỉ xảy ra sau khi hoạt ảnh xoay và nó không tốt.

Cách chính xác để thay đổi khung của subViews khi thay đổi hướng là gì?

+0

Tôi đã giải quyết vấn đề này bằng cách viết một phương thức trong mỗi chế độ xem phụ sẽ xử lý phần thay đổi khung. Tôi sẽ thiết lập khung nhìn của cha mẹ trong willRotateToInterfaceOrientation và sau đó tạo ra một khung tương tự mới bằng cách sử dụng chức năng CGFrameMake và chuyển nó cho mỗi subView. Nó làm việc cho tôi .... kiểm tra xem nó có hữu ích không. – Mohammad

+0

Tôi không hiểu câu trả lời của bạn. Trong willRotateToInterface tôi vẫn không biết khung của superView vì xoay vòng đã không xảy ra. Đây là vấn đề. – adamsiton

+0

Tôi không sử dụng khung của superView để xoay các bản phụ. Tôi tính toán những gì sẽ là giá trị cho khung của superView sau khi quay và sau đó thực hiện một CGRect mới dựa trên tính toán và sau đó vượt qua đó để xử lý phương pháp của mỗi subView. Nếu bạn không thể tính giá trị cho khung của superView sau khi xoay thì ở trên sẽ không hiệu quả với bạn. – Mohammad

Trả lời

3

Tôi nghĩ bạn có thể thử ghi đè layoutSubviews. Ở đó bạn có thể bố trí các subviews theo định hướng hiện tại, mà không làm phiền về ý/RotateFromInterfaceOrientation. layoutSubviews được gọi mỗi lần xem được trình bày. Điều này sẽ giúp bạn trong thời gian khung hình của bạn thay đổi với các hình ảnh động.

HTH,

Akshay

+0

Nhưng nó sẽ có nghĩa là tôi đang di chuyển tất cả các logic bố trí để xem và không ViewController. Hiện tại tôi đang thiết lập bố trí của subView theo thuộc tính của UIViewController. Di chuyển các logic để UIView có nghĩa là tôi phải phân lớp UIView và di chuyển tất cả các tham số cho subClass tùy chỉnh này. Tôi không hoàn toàn chắc chắn rằng logic này nên được trong UIView và không phải là UIVIewController, nhưng tôi sẽ cố gắng. – adamsiton

4

Chức năng này làm việc cho những gì bạn cần bởi vì khung quan điểm đã thay đổi từ xoay và nó không trì hoãn các hoạt hình tùy chỉnh.

-(void)willAnimateRotationToInterfaceOrientation (UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    float width = UIInterfaceOrientationIsPortrait(toInterfaceOrientation) ? [[UIScreen mainScreen] applicationFrame].size.width : [[UIScreen mainScreen] applicationFrame].size.height; 
//do something with the width now 
//or you can get the height the same way 
} 
Các vấn đề liên quan