2012-02-21 48 views
5

Tôi có một bản xem trước và có một uiimageview bên trong nó. Tôi muốn sử dụng để có thể phóng to ra khỏi hình ảnh vì nó là một hình ảnh lớn. scrollview chỉ cần cuộn theo chiều dọc không theo chiều ngang.phóng to thu nhỏ và thu nhỏ không hoạt động chính xác

trước khi thêm hiệu ứng phóng to Tôi có đoạn code sau đây và nó làm việc như tôi muốn,

-(void)viewDidLoad 
{ 
[scrollView setScrollEnabled:YES]; 
[scrollView setContentSize:CGSizeMake(320, 1690)]; 
} 

Vì vậy, tôi đã làm một số nghiên cứu và kết thúc với đoạn mã sau để cho phép nhúm zoom trong và ngoài,

-(void)viewDidLoad 
{ 
scrollView.scrollEnabled = YES; 

[scrollView setContentSize:CGSizeMake(320, 1690)]; 
scrollView.delegate = self; 
// scrollView.contentSize = instImage.frame.size; 
scrollView.minimumZoomScale = scrollView.frame.size.width/instImage.frame.size.width; 
scrollView.maximumZoomScale = 2.0; 
[scrollView setZoomScale:scrollView.minimumZoomScale]; 
[[NSRunLoop currentRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]]; 

} 


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 

return instImage; 
} 


- (CGRect)centeredFrameForScrollView:(UIScrollView *)scroll andUIView:(UIView *)rView { 

CGSize boundsSize = scroll.bounds.size; 
CGRect frameToCenter = rView.frame; 

// center horizontally 
if (frameToCenter.size.width < boundsSize.width) { 

    frameToCenter.origin.x = ((boundsSize.width - frameToCenter.size.width)/2); 

}else { 

    frameToCenter.origin.x = 0; 
} 

return frameToCenter; 
} 


- (void)scrollViewDidZoom:(UIScrollView *)scrollV { 

instImage.frame = [self centeredFrameForScrollView:scrollV andUIView:instImage];; 
} 

Bây giờ tôi có những vấn đề sau đây và tôi không thể tìm ra những gì là sai,

  1. khi chế độ xem vừa được tải trước khi bất kỳ thao tác cuộn nào, scrollview không cuộn hết cỡ đến cuối hình ảnh.

  2. khi được ghim để phóng to, nó cuộn sang trái và sang phải và lên và xuống hình ảnh nhưng vẫn không cuộn xuống hết hình ảnh, nhưng vẫn nhiều hơn so với lúc đầu sự bắt đầu.

  3. khi tôi thu nhỏ, toàn bộ điều dừng lại. bạn không thể phóng to hoặc thu nhỏ, nó thậm chí không cuộn nữa. hoàn toàn bị khóa.

Tôi đã thực hiện một số nghiên cứu và tìm thấy bài đăng sau. https://stackoverflow.com/a/6384834/1103257

nhưng tôi không biết tôi sẽ tìm NSDefaultRunLoopMode ở đâu hoặc thậm chí cách tìm kiếm NSDefaultRunLoopMode hoặc thậm chí cách tìm kiếm để tìm hiểu xem điều này có thể giải quyết được hay không.

Trả lời

5

Cuối cùng tôi đã nhận được. Giải pháp này hoạt động hoàn hảo!

trong file .h của bạn

@interface scrollViewController : UIViewController <UIScrollViewDelegate>{ 

     float oldScale; 

     IBOutlet UIScrollView *scrollView; 
     IBOutlet UIImageView *image; 
} 

@end 

và chỉ cần kết nối hình ảnh đến UIImageView có ảnh mà bạn muốn phóng to trong và ngoài và bên trong scrollview của bạn. sau đó kết nối scrollview với uiscrollview của bạn trên giao diện của bạn.

trong file .m bạn

@implementation scrollViewController 


-(void)viewDidLoad 
{ 
[super viewDidLoad]; 

scrollView.scrollEnabled = YES; 
scrollView.minimumZoomScale=1.0; 
scrollView.maximumZoomScale=4.0; 
[scrollView setContentSize:CGSizeMake(320, 1700)]; 
scrollView.delegate=self; 

} 

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

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollV withView:(UIView *)view atScale:(float)scale 
{ 
    [scrollView setContentSize:CGSizeMake(scale*320, scale*1700)]; 
} 

    @end 

hy vọng điều này giúp.

+0

Cảm ơn @Mona. Tôi cũng phải đối mặt với cùng một vấn đề trên. Nó làm việc cho tôi. :) – iKT

1

Sau đây là cách tôi thực hiện một cái nhìn cuộn để di chuyển xung quanh một hình ảnh lớn trong viewDidLoad

UIImage *img = [UIImage imageNamed:@"image_name.png"]; 
largeImageView = [[UIImageView alloc] initWithImage:img]; 

[self.view insertSubview: largeImageView atIndex:0]; 
[(UIScrollView *)self.view setContentSize:[img size]]; 
[(UIScrollView *)self.view setMaximumZoomScale:2.2]; 
[(UIScrollView *)self.view setMinimumZoomScale:0.3]; 
[(UIScrollView *)self.view setCanCancelContentTouches:YES]; 
[(UIScrollView *)self.view setBounces:YES]; 
[mapImageView setUserInteractionEnabled:YES]; 

Sau đó, tôi cũng có phương pháp viewForZoomingInScrollView:

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

Bạn scrollViewDidZoom chức năng là không cần thiết vào thời điểm này . Tôi thực hiện một cái gì đó tương tự để giữ cho hình ảnh tập trung khi toàn bộ hình ảnh có thể nhìn thấy, nhưng ngay bây giờ tôi sẽ không lo lắng về điều đó nếu tôi là bạn.

+0

không hoạt động như mong đợi – Mona

+1

Để chắc chắn, bạn có đang hoạt động trong iOS 5 không? Và bộ điều khiển xem của bạn là một đại biểu của ? – atreat

+0

có cho cả hai câu hỏi – Mona

1

Cùng một vấn đề nhưng có một cách giải quyết đơn giản, chỉ cần đặt các điểm ảnh để tương tác người dùng được kích hoạt:

[self.imageView setUserInteractionEnabled:YES]; 
0

Vấn đề đối với tôi là tôi đã sử dụng tính năng tự động bố trí và nó không được thiết lập các đại biểu zoom cho UIScrollView. Tôi đã sử dụng một UIViewController tùy chỉnh mà cũng là một UIScrollViewDelegate. Tôi thấy bạn có thể trong mã thiết lập các đại biểu:

func viewDidLoad() { scrollView.delegate = self } 

Hoặc trong kịch bản thiết lập các đại biểu do chọn UIScrolView và trong các kết nối thanh tra kéo các đại biểu để trỏ đến UIViewController.

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