IOS: scaling UIScrollView programmatically not working

I have a UIScrollView page that contains various kinds of information, such as UITables, but also scalable images. So I set up main-ScrollView with the ability to view pages, and as subzones I added ScrollViews scalable images with images as content. Everything works fine, I just can’t set a smaller current scale scale for ScrollViews images.

UIImageView *imageView = [[UIImageView alloc] initWithImage:Image];

//storing a link to the imageView
[imagelinkArray addObject:imageView];

CGRect ScrollViewImageRect;
ScrollViewImageRect = CGRectMake((self.scrollView.frame.size.width) * i, 0, 320, self.scrollView.frame.size.height);

float widthfactor = ScrollViewImageRect.size.width / imageView.frame.size.width;
float heightfactor = ScrollViewImageRect.size.height / imageView.frame.size.height;
float zoomscale = MIN(widthfactor, heightfactor);

UIScrollView *imageScrollView = [[UIScrollView alloc] initWithFrame:ScrollViewImageRect];
imageScrollView.contentSize = CGSizeMake(imageView.frame.size.width, imageView.frame.size.height);

imageScrollView.delegate = self;

[imageScrollView setMinimumZoomScale:zoomscale];
[imageScrollView setMaximumZoomScale:1.5];

[imageScrollView addSubview:imageView];

//doesn't work:
[imageScrollView setZoomScale:0.5 animated:YES];

[self.scrollView addSubview:imageScrollView];

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return [imagelinkArray objectAtIndex:page];
}

ScrollView Image-ScrollViews , . . , , . -ScrollView 1.0, .

, :

[changeScrollView setZoomScale:changeScrollView.minimumZoomScale animated:YES];

, 1.0;

, , - - (void)scrollViewDidScroll:, , , , , . , - . , UIScrollView , . ?

Update: . , , , "-" ScrollViews ScrollView. ScrollViews, ( ScrollView, ALL sub-ScrollViews). ?

+4
4

, viewForZoomingInScrollView: scrollview. , .

+4

, minimumZoomScale, 1.0. 0.5, , .

, maximumZoomScale.

[imageScrollView setMinimumZoomScale:0.25];
+3

, viewForZoomingInScrollView: . , scrollView. , viewDidAppear .

: , :

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    [self updateImageSize];
}


- (void)updateImageSize
{
    updatePage = updatePage + 1;

    if (updatePage < imagescrolllinkArray.count) {
        UIScrollView *changeScrollView = (UIScrollView*)[imagescrolllinkArray objectAtIndex:updatePage];
        [changeScrollView setZoomScale:changeScrollView.minimumZoomScale];
    }

    updatePage = updatePage - 2;

    if (updatePage > -1) {
        UIScrollView *changeScrollView = (UIScrollView*)[imagescrolllinkArray objectAtIndex:updatePage];
        [changeScrollView setZoomScale:changeScrollView.minimumZoomScale];
    }

    //reset to current view
    updatePage = updatePage + 1;
}


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return [imagelinkArray objectAtIndex:updatePage];
}

viewDidAppear , .

if (i == 1) {
    updatePage = 0;
    [imageScrollView setZoomScale:imageScrollView.minimumZoomScale];
}
0

, . , , ScrollView , , , ScrollView .

means that the problem only occurs when the image is completely reduced (.scale = .minimumscale). I do not understand when and why this happens. Logging viewDidScrolldoes not return anything in these situations.

Has anyone encountered similar problems?

0
source

Source: https://habr.com/ru/post/1533130/


All Articles