Uiscrollview zoom in and out does not work properly

I have a uiscrollview and inside it there is a uiimageview. I want to be used to be able to enlarge the image due to the large image. scrollview only needs to scroll vertically, not horizontally.

before adding the scaling effect, I had the following code, and it worked the way I wanted,

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

So, I did some research and got the following code to turn scaling on and off.

-(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];;
 }

Now I have the following problems, and I can’t understand what happened,

  • when the view simply loads before any click, scrolling does not scroll all the way to the end of the image.

  • , , , , .

  • , . , . .

. qaru.site/questions/1103634/...

, NSDefaultRunLoopMode , , .

+5
4

, , . !

.h

@interface scrollViewController : UIViewController <UIScrollViewDelegate>{

      float oldScale;

      IBOutlet UIScrollView *scrollView;
      IBOutlet UIImageView  *image;
}

@end

uiimageview, , , scrollview. scrollview uiscrollview .

.m

@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

, .

+5

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];

viewForZoomingInScrollView:

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

scrollViewDidZoom . , , , , .

+1

, , :

[self.imageView setUserInteractionEnabled:YES];
+1

The problem for me was that I used auto-layout, and it did not set the scaling delegate for UIScrollView. I used a custom UIViewController, which was also a UIScrollViewDelegate. I found that you can either set a delegate in the code:

func viewDidLoad() { scrollView.delegate = self }

Or, in the storyboard, set the delegate by selecting UIScrolView, and in the connection inspector, drag the delegate to point to the UIViewController.

0
source

All Articles