【问题标题】:Problem in zooming of UIScrollView?UIScrollView 的缩放问题?
【发布时间】:2010-11-01 06:14:02
【问题描述】:

在我的应用程序中,我在 UIScrollView 中使用了 UIImageView,并为此使用了代码。

- (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 进行缩放。

【问题讨论】:

  • @Jacob Relkin,你有什么想法吗?

标签: iphone


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我成功找到了上述问题的解决方案。我为此写了,

    - (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 和 UIButtons 等其他控件。现在它可以完美地工作并缩放每个控件。

    【讨论】:

      【解决方案3】:
          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)];
      }
      

      【讨论】:

        猜你喜欢
        • 2011-07-03
        • 2011-12-31
        • 1970-01-01
        • 2014-07-09
        • 1970-01-01
        • 2017-01-20
        • 1970-01-01
        • 2014-11-09
        • 1970-01-01
        相关资源
        最近更新 更多