代码之家  ›  专栏  ›  技术社区  ›  Tirth

UIScrollView的缩放问题?

  •  0
  • Tirth  · 技术社区  · 14 年前

    - (void)viewDidLoad 
    
    {
    
    scrollV.contentSize = CGSizeMake(imageView.frame.size.width, imageView.frame.size.height);
    
      [super viewDidLoad];
    
    }
    
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    
    {
    
        return imageView;
    }
    

    代码运行良好,但当我将UIButton放在scrollView的imageView上,并在缩放scrollV之后,imageView会根据scrollView完美地缩放,但UIButton不会被缩放。

    当我缩放imageview时,我放置在imageview上的按钮也会相对于缩放后的imageview进行缩放。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Vladimir    14 年前

    创建一个代理UIView实例作为scrollview的子视图,并将所有要缩放的UI元素放在其中。然后从返回该视图 viewForZoomingInScrollView 方法

        2
  •  0
  •   poke    13 年前

    我成功地找到了解决上述问题的方法。我为此写了一篇文章,

    - (void)viewDidLoad 
    
    {
    
        bgViewOfImage.contentStretch = CGRectMake(ImageView.frame.origin.x, ImageView.frame.origin.y, ImageView.frame.size.width, ImageView.frame.size.height);
        scrollV.contentSize = CGSizeMake(bgViewOfImage.frame.size.width, bgViewOfImage.frame.size.height);
        [super viewDidLoad];
    }
    
    
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    
    {
    
        return bgViewOfImage;
    }
    

    我创建了一个层次结构,在主视图中插入一个UIView,然后拖动其他控件,比如UIImageview和uibutton,现在它可以完美地工作并缩放每个控件。

        3
  •  0
  •   poke    13 年前
        CGSize imageView = [photo size];
        UIScrollView *scrollView = (UIScrollView *)[self view];
        [scrollView setDelegate:self];
        [scrollView setContentSize:photoSize];
        [scrollView setBackgroundColor:[UIColor blackColor]];
        [scrollView setShowsHorizontalScrollIndicator:NO];
        [scrollView setShowsVerticalScrollIndicator:NO];
    
        // Create the image view.
        imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, photoSize.width, photoSize.height)];
        [imageView setImage:photo];
        [scrollView addSubview:imageView];
    
        // Configure zooming.
        CGSize screenSize = [[UIScreen mainScreen] bounds].size;
        CGFloat widthRatio = screenSize.width / photoSize.width;
        CGFloat heightRatio = screenSize.height / photoSize.height;
        CGFloat initialZoom = (widthRatio > heightRatio) ? heightRatio : widthRatio;
        [scrollView setMaximumZoomScale:3.0];
        [scrollView setMinimumZoomScale:initialZoom];
        [scrollView setZoomScale:initialZoom];
        [scrollView setBouncesZoom:YES];
    
        // Center the photo.
        CGFloat topInset = (screenSize.height - photoSize.height * initialZoom) / 2.0;
        if (topInset > 0.0)
        {
            [scrollView setContentInset:UIEdgeInsetsMake(topInset - 44.0, 0.0, 0.0, 0.0)];
        }
    }
    
    #pragma mark -
    #pragma mark UIScrollViewDelegate
    
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
        return imageView;
    }
    
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        CGSize screenSize = [[UIScreen mainScreen] bounds].size;
        CGSize photoSize = [photo size];
        CGFloat topInset = (screenSize.height - photoSize.height * [scrollView zoomScale]) / 2.0;
        if (topInset < 0.0)
        {
            topInset = 0.0;
        }
    
        [scrollView setContentInset:UIEdgeInsetsMake(topInset, 0.0, -topInset, 0.0)];
    }