【问题标题】:How to Zoom Scrollview Image in iOS?如何在 iOS 中缩放 Scrollview 图像?
【发布时间】:2015-01-11 10:23:55
【问题描述】:

我是 iOS 开发中的新手。我制作了一个 ScrollView,它包含我的 JSOn 数组图像,并且我的 Scrollview 启用了分页,我添加了一个 Scrollview 的方法来缩放 viewForZoomingInScrollView 然后它缩放我的第一个图像并重叠在第二个图像上当 viewForZoomingInScrollView 方法在这里调用我的 Scrollview 和 for viewForZoomingInScrollView 方法时,只想缩放我选择的图像

Scrollview添加图片的代码

for( index=0; index < [self.imagesa count]; index++)
{
    NSDictionary *dict=[self.imagesa objectAtIndex:index];
    NSString *image=[dict valueForKey:@"link"];
    bigImage=[[UIImageView alloc]init];
    bigImage.userInteractionEnabled=TRUE;
    bigImage.image=nil;
    bigImage.bounds=CGRectMake(0, 0, self.zoomScroll.frame.size.width, self.zoomScroll.frame.size.height);
    bigImage.frame=CGRectMake(index * self.zoomScroll.frame.size.width, 0, self.zoomScroll.frame.size.width, self.zoomScroll.frame.size.height);
    [bigImage setMultipleTouchEnabled:YES];
    [bigImage removeFromSuperview];
    [bigImage sd_setImageWithURL:[NSURL URLWithString:image] placeholderImage:[UIImage imageNamed:@"1.png"]];
    [bigImage setUserInteractionEnabled:TRUE];
    [self.objectarray insertObject:bigImage atIndex:index];
    [self.zoomScroll addSubview:bigImage];
    self.zoomScroll.clipsToBounds=YES;
    [self.zoomScroll addSubview:[self.objectarray objectAtIndex:index]];
}
[self.zoomScroll addSubview:bigImage];

这里 self.imagesa 是 Json Parsed 数组,self.imagearray 是 NSMuttable 数组。

及缩放方法

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
for (index=0 ; index <[self.imageArray count]; index ++)
{
    return [self.zoomScroll.subviews objectAtIndex:index];
}
return nil;
}

但它不能正常工作,它仅缩放第一张图像,当缩放第一张图像并滚动我的 Scrollview 时,第二张图像重叠。在这里我还为 Scrollview 设置了最大和最小比例。当我 ZoomScrollview 时,它的大小是更改并且只显示第一个图像而不是滚动。

【问题讨论】:

    标签: ios objective-c iphone uiscrollview


    【解决方案1】:

    只是使用了如下方法:-

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    
     {
    
       return self.imageView;
    
     }
    - (void)viewDidLoad {
    
        [super viewDidLoad];
    
         self.scrollView.minimumZoomScale=0.5;
    
         self.scrollView.maximumZoomScale=6.0;
    
         self.scrollView.contentSize=CGSizeMake(1280, 960);
    
         self.scrollView.delegate=self;
    
        }
    

    另一种缩放方法:-

    -(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view   atScale:(float)scale
       {}
    

    【讨论】:

      【解决方案2】:

      要实现您的要求,您必须对当前结构进行一些更改。

      目前您将所有ImageViews 添加到单个ScrollView,而不是您必须为每个ImageView 创建ScrollViews 并将所有ScrollViews 添加到单个ScrollView

      您的代码应如下所示:

      UIScrollView *parentScrollView = [[UIScrollView all] initWithFrame:<frame>];
      
      for( index=0; index < [self.imagesa count]; index++)
      {
          UIScrollView *innerScrollView = [UIScrollView alloc] initWithFrame:CGRectMake(index * parentScrollView.frame.size.width, 0, parentScrollView.frame.size.width, parentScrollView.frame.size.height)];
      
          NSDictionary *dict=[self.imagesa objectAtIndex:index];
          NSString *image=[dict valueForKey:@"link"];
          bigImage=[[UIImageView alloc]init];
          bigImage.tag = 123; // Helps to get ImageView to given as zoom view in scrollview delegate
          bigImage.userInteractionEnabled=TRUE;
          bigImage.image=nil;
          bigImage.frame=CGRectMake(0, 0, innerScrollView.frame.size.width, innerScrollView.frame.size.height);
          [bigImage setMultipleTouchEnabled:YES];
          [bigImage removeFromSuperview];
          [bigImage sd_setImageWithURL:[NSURL URLWithString:image] placeholderImage:[UIImage imageNamed:@"1.png"]];
          [bigImage setUserInteractionEnabled:TRUE];
          [self.objectarray insertObject:bigImage atIndex:index];
      
          [parentScrollView addSubview:innerScrollView]; 
      }
      

      您的缩放方法可能如下所示

      -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
      {
          UIImageView *imageView = [scrollView viewWithTag:123]; // returns ImageView
          if(imageView){
              return imageView;
          }
          return nil;
      }
      

      【讨论】:

      • 这里写你的代码然后在 viewForZoomingInScrollView 方法错误是不兼容的指针类型初始化“UIImageView”与类型'UIView'的表达式
      • 是警告还是错误?因为我没有测试我的代码但返回 UIImageView 不应该给出错误但可能是一个警告。或者您可以将 UIImageView 转换为 UIView,例如 return (UIView *)imageView
      • 运行应用程序时不显示我的滚动视图。
      • 当我将 subscrollview 添加到我的 Scrollview 时它不会滚动。
      • 我没有将 parentScrollView 作为子视图添加到 self.view 你必须这样做并设置 parentScrollView 的 contentSize 以启用滚动,我只回答了如何实现你的结果可能需要一些配置。
      【解决方案3】:

      请检查这是否对您有用,至于我的应用需求,我正在使用它。

      首先,如果您将 imageViews 添加到 scrollView,然后在将每个 imageView 添加到 scrollView 之前设置每个 imageView 的 tag 属性的值,如果您为要添加的所有 imageViews 的 tag 属性设置相同的值,则可以滚动视图。

      然后如下添加UIScrollView的delegate方法并检查,

      - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
      {
          return [scrollView viewWithTag:<valueOfTagPropertySetToImageView>];
      }
      

      【讨论】:

        【解决方案4】:

        从此链接查看我的答案,

        Check the link

        - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
        
        {
        
            return self.imageView;
        
        }
        - (void)viewDidLoad {
        
            [super viewDidLoad];
        
            self.scrollView.minimumZoomScale=0.5;
        
            self.scrollView.maximumZoomScale=6.0;
        
            self.scrollView.contentSize=CGSizeMake(1280, 960);
        
            self.scrollView.delegate=self;
        
        }
        

        Apple 自己的解决方案,Apple Documentation link

        【讨论】:

        • 你在storyboard中连接了ScrollView Delegate吗?
        • 是的@Vineesh TP 我连接所有代表。
        • 但在这里我认为它不起作用,因为我的 ScrollView 包含图像数组。
        • @AshishGabani:只添加一张图片。我已经给出了苹果文档。至少阅读文档。
        • 我知道在苹果文档中也只添加了一个图像,但我希望我的所有数组图像都进入我的滚动视图,如果你有请给我解决方案。
        猜你喜欢
        • 2017-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 2019-10-23
        相关资源
        最近更新 更多