2010-04-13 27 views
5

Tôi đang vật lộn với UIScrollview của mình để làm cho nó phóng to UIImageView cơ bản. Trong điều khiển điểm của tôi, tôi thiết lậpUIScrollView setZoomScale không hoạt động?

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
return myImageView; 
} 

Trong phương pháp viewDidLoad tôi cố gắng thiết lập các zoomScale đến 2 như sau (chú ý UIImageView và hình ảnh được thiết lập trong giao diện Builder):

- (void)viewDidLoad { 
[super viewDidLoad]; 

myScrollView.contentSize = CGSizeMake(myImageView.frame.size.width, myImageView.frame.size.height); 
myScrollView.contentOffset = CGPointMake(941.0, 990.0); 
myScrollView.minimumZoomScale = 0.1; 
myScrollView.maximumZoomScale = 10.0; 
myScrollView.zoomScale = 0.7; 
myScrollView.clipsToBounds = YES; 
myScrollView.delegate = self; 

NSLog(@"zoomScale: %.1f, minZoolScale: %.3f", myScrollView.zoomScale, myScrollView.minimumZoomScale); 
} 

Tôi đã thử một vài biến thể của điều này, nhưng NSLog luôn hiển thị một zoomScale là 1.0.

Bất kỳ ý tưởng nào mà tôi vặn cái này lên?

Trả lời

19

Cuối cùng tôi đã làm việc này. những gì gây ra vấn đề là các cuộc gọi đại biểu được ở cuối. Bây giờ tôi di chuyển nó lên và .... ở đây chúng tôi đi.

Code mới trông như thế này:

- (void)viewDidLoad { 
[super viewDidLoad]; 

myScrollView.delegate = self; 
myScrollView.contentSize = CGSizeMake(myImageView.frame.size.width, myImageView.frame.size.height); 
myScrollView.contentOffset = CGPointMake(941.0, 990.0); 
myScrollView.minimumZoomScale = 0.1; 
myScrollView.maximumZoomScale = 10.0; 
myScrollView.zoomScale = 0.7; 
myScrollView.clipsToBounds = YES; 
} 
+6

Có vẻ như điều này là do hệ điều hành gọi -viewForZoomingInScrollView gây ra. Nếu đại biểu của bạn là không, cuộc gọi này sẽ không được thực hiện, do đó chế độ xem mọi thứ sẽ bị tắt. –

+0

Rất cám ơn !! Nó thực sự là sự thật. Nhưng tại sao điều này lại xảy ra? Điều này có thể không phải là doanh nghiệp của đại biểu. – Yeung

1

Dưới đây là một ví dụ khác tôi đã thực hiện. Điều này là sử dụng một hình ảnh được bao gồm trong thư mục tài nguyên. So với một trong những bạn có này thêm UIImageView vào xem như là một subview và sau đó thay đổi zoom để xem toàn bộ.

-(void)viewDidLoad{ 

[super viewDidLoad]; 

UIImage *image = [UIImage imageNamed:@"random.jpg"]; 

imageView = [[UIImageView alloc] initWithImage:image]; 

[self.view addSubview:imageView]; 

[(UIScrollView *) self.view setContentSize:[image size]]; 

[(UIScrollView *) self.view setMaximumZoomScale:2.0]; 

[(UIScrollView *) self.view setMinimumZoomScale:0.5]; 

} 
+0

Không thể nghĩ tại sao điều đó có thể gây ra bất kỳ rắc rối nào, nhưng trong tuyệt vọng của tôi vẫn cố gắng. Kết quả không thay đổi – iFloh

1

Tôi biết điều này là khá muộn như câu trả lời đi, nhưng vấn đề là mã của bạn gọi zoomScale trước khi nó đặt các đại biểu. Bạn là đúng những thứ khác trong đó không yêu cầu các đại biểu, nhưng zoomScale không vì nó có để có thể gọi lại khi zoom hoàn tất. Ít nhất đó là cách tôi nghĩ nó hoạt động.

+0

Chào mừng bạn đến với SO @turboc! Nhận xét này chắc chắn hữu ích, nhưng để tham khảo trong tương lai, hãy thêm chú thích như thế này vào phần "nhận xét" bên dưới bài đăng thích hợp (trong trường hợp này, bài đăng đã được chấp nhận làm câu trả lời). – ewitkows

0

Mã của tôi phải hoàn toàn điên rồ vì quy mô mà tôi sử dụng hoàn toàn trái ngược với hướng dẫn và những người khác đang làm. Đối với tôi, minScale = 1 cho biết hình ảnh đã được thu nhỏ hoàn toàn và phù hợp với UIImageView có chứa nó.

Dưới đây là mã của tôi:

[self.imageView setImage:image]; 
    // Makes the content size the same size as the imageView size. 
    // Since the image size and the scroll view size should be the same, the scroll view shouldn't scroll, only bounce. 
    self.scrollView.contentSize = self.imageView.frame.size; 

    // despite what tutorials say, the scale actually goes from one (image sized to fit screen) to max (image at actual resolution) 
    CGRect scrollViewFrame = self.scrollView.frame; 
    CGFloat minScale = 1; 
    // max is calculated by finding the max ratio factor of the image size to the scroll view size (which will change based on the device) 
    CGFloat scaleWidth = image.size.width/scrollViewFrame.size.width; 
    CGFloat scaleHeight = image.size.height/scrollViewFrame.size.height; 
    self.scrollView.maximumZoomScale = MAX(scaleWidth, scaleHeight); 
    self.scrollView.minimumZoomScale = minScale; 
    // ensure we are zoomed out fully 
    self.scrollView.zoomScale = minScale; 

này hoạt động như tôi mong đợi. Khi tôi tải hình ảnh vào UIImageView, nó sẽ được thu nhỏ hoàn toàn. Sau đó tôi có thể phóng to và sau đó tôi có thể xoay hình ảnh.

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