2010-10-04 27 views

Trả lời

8

Tôi thường sử dụng các phương pháp sau đây (thêm vào thể loại UIScrollView tùy chỉnh):

- (CGRect) visibleRect{ 
    CGRect visibleRect; 

    visibleRect.origin = self.contentOffset; 
    visibleRect.size = self.bounds.size; 

    visibleRect.origin.x /= self.zoomScale; 
    visibleRect.origin.y /= self.zoomScale; 
    visibleRect.size.width /= self.zoomScale; 
    visibleRect.size.height /= self.zoomScale; 
    return visibleRect; 
} 
+0

cảm ơn bạn, đã làm việc như mong đợi :) – Manny

+0

Sẽ đánh giá cao nếu bạn để lại một số nhận xét về câu trả lời của tôi. – DanSkeel

5

Vấn đề với giải pháp @Vladimir là nó sẽ hiển thị sai visibleRect nếu viewForZoom nhỏ hơn giới hạn scrollview. Vì vậy, tôi đã đưa ra giải pháp này.

- (CGRect) zoomedFrame{ 
    CGRect zoomedFrame; 

    zoomedFrame.origin = self.contentOffset; 
    zoomedFrame.origin.x -= zoomingView.frame.origin.x; 
    zoomedFrame.origin.y -= zoomingView.frame.origin.y; 
    zoomedFrame.size = self.contentSize; 
    return zoomedFrame; 
} 

zoomingView là chế độ xem trả về phương pháp viewForZoomingInScrollView:.
bounds là giới hạn của scrollView.


Vì vậy, có hai trường hợp:

  1. Khi zoomingView nhỏ hơn bounds, contentOffset phản ánh không phải là góc trên cùng bên trái của xem nội dung, nhưng một số sự thay đổi kỳ lạ của nội dung quan điểm tương đối đến trung tâm của bounds. Và zoomingView.frame.origin có các giá trị bình thường như nếu zoomingView nằm ở trung tâm của bounds. (điều này xảy ra nếu bạn cố gắng thu nhỏ zoomingView hơn minimulScale)

  2. Khi zoomingView là bigget hơn bounds, zoomingView.frame.origin có giá trị kỳ lạ như thế này:

    {-6.15367e-06, 3,98168 e-06}

    contentOffset hiển thị nội dung số should.


Vì vậy, tất cả những gì bù đắp nhau như tôi đã giới thiệu trong mã của tôi.

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