2010-11-20 28 views
5

Tôi có một số UIImageView trong số UIScrollView và tôi gặp sự cố với thuộc tính contentOffset. Từ tham chiếu của Apple, điều này được định nghĩa là:contentOffset in UIScrollView sau khi xoay của iPhone

contentOffset: Điểm gốc của nội dung được bù đắp từ nguồn gốc của chế độ xem cuộn.

Ví dụ, nếu hình ảnh nằm ở góc trên bên trái của màn hình như dưới đây thì contentOffset sẽ (0,0):

_________ 
    |IMG | 
    |IMG | 
    |  | 
    |  | 
    |  | 
    |  | 
    --------- 

Đối với luân chuyển thiết bị tôi có các thiết lập sau:

scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
     UIViewAutoresizingFlexibleHeight); 

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
     UIViewAutoresizingFlexibleHeight); 

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

Điều này sẽ làm cho mọi thứ xoay quanh tâm của màn hình. Sau khi xoay màn hình, sau đó màn hình sau đó sẽ trông như thế này:

______________ 
    |  IMG | 
    |  IMG | 
    |   | 
    -------------- 

Vấn đề của tôi là nếu bây giờ tôi đọc của contentOffset, nó vẫn là (0,0). (Nếu tôi di chuyển UIImage ở chế độ ngang, giá trị của contentOffset được cập nhật, nhưng nó được tính đối với sai nguồn gốc.)

Có cách nào để tính tọa độ cho UIImage liên quan đến phía trên bên trái góc của màn hình. contentOffset dường như chỉ trả lại giá trị này khi màn hình ở hướng ban đầu của chế độ xem.

Tôi đã cố đọc self.view.transformscrollView.transform nhưng chúng luôn là nhận dạng.

Trả lời

3

Dưới đây là một cách để làm điều này: Đối với scrollview thiết

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth 
            | UIViewAutoresizingFlexibleHeight); 

scrollView.contentMode = UIViewContentModeTopRight; 

Chế độ UIViewContentModeTopRight sẽ giữ góc trên bên trái nằm ở tọa độ (0,0) ngay cả khi hành vi luân chuyển là không đúng. Để có được hành vi quay tương tự như trong UIViewContentModeCenter, hãy thêm

scrollView.contentOffset = fix(sv.contentOffset, currentOrientation, goalOrientation); 

vào willAnimateRotationToInterfaceOrientation. fix là hàm

CGPoint fix(CGPoint offset, UIInterfaceOrientation currentOrientation, UIInterfaceOrientation goalOrientation) { 

CGFloat xx = offset.x; 
CGFloat yy = offset.y; 

CGPoint result; 

if (UIInterfaceOrientationIsLandscape(currentOrientation)) { 

    if (UIInterfaceOrientationIsLandscape(goalOrientation)) { 
     // landscape -> landscape 
     result = CGPointMake(xx, yy); 
    } else { 
     // landscape -> portrait 
     result = CGPointMake(xx+80, yy-80); 
    } 
} else { 
    if (UIInterfaceOrientationIsLandscape(goalOrientation)) { 
     // portrait -> landscape 
     result = CGPointMake(xx-80, yy+80); 
    } else { 
     // portrait -> portrait 
     result = CGPointMake(xx, yy); 
    } 
} 
return result; 
} 

Đoạn mã trên sẽ làm cho scrollview xoay quanh trung tâm của màn hình và cũng đảm bảo rằng các corder trên bên trái luôn luôn là là tọa độ (0,0).

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