Ios 缩放图像,然后滚动图像以查看下一个图像,上一个图像不会缩小

Ios 缩放图像,然后滚动图像以查看下一个图像,上一个图像不会缩小,ios,uiimageview,zooming,Ios,Uiimageview,Zooming,我想在滚动滑块后将图像缩小到原始大小。 我正在使用REPagedScrollView库来实现滑块。 我有5个图像在滑块。现在放大第一幅图像,然后立即滚动滑块以查看第二幅图像。然后返回查看第一张图像。第一张图像未缩小。该图像仍处于放大模式。 我怎样才能解决这个问题 提前谢谢 我正在使用下面的代码 -(void)slideShow { [scrollView removeFromSuperview]; scrollView = [[REPagedScrollView alloc] i

我想在滚动滑块后将图像缩小到原始大小。 我正在使用REPagedScrollView库来实现滑块。 我有5个图像在滑块。现在放大第一幅图像,然后立即滚动滑块以查看第二幅图像。然后返回查看第一张图像。第一张图像未缩小。该图像仍处于放大模式。 我怎样才能解决这个问题

提前谢谢

我正在使用下面的代码

-(void)slideShow
{
    [scrollView removeFromSuperview];
    scrollView = [[REPagedScrollView alloc] initWithFrame:self.scrollVw.bounds];
    scrollView.delegate=self;
    scrollView.pageControl.pageIndicatorTintColor=[UIColor clearColor];
    scrollView.pageControl.currentPageIndicatorTintColor=[UIColor clearColor];
    current_page=0;

    for(int i=0;i<[self.PhotoImgArr count];i++){


        // Image view
        image_scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,self.scrollVw.frame.size.width,self.scrollVw.frame.size.height)];
        self.image_view = [[AsyncImageView alloc] initWithFrame:CGRectMake(0,0, image_scroll.frame.size.width, image_scroll.frame.size.height)];

        self.image_view.backgroundColor=[UIColor clearColor];
     //   self.image_view.contentMode = UIViewContentModeScaleAspectFit;
        self.image_view.clipsToBounds = true;
        self.image_view.userInteractionEnabled = YES;

        //self.image_view.image=[UIImage imageNamed:@"Stars"];
        self.image_view.imageURL =[NSURL URLWithString:[self.PhotoImgArr objectAtIndex:i]];
        doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
        [doubleTap setNumberOfTapsRequired:2];

        [self.image_view addGestureRecognizer:doubleTap];
//        twoFingerPinch = [[UIPinchGestureRecognizer alloc]
//                          initWithTarget:self
//                          action:@selector(twoFingerPinch:)];
//        [self.image_view addGestureRecognizer:twoFingerPinch];
        [image_scroll setDelegate:self];
        [image_scroll setShowsHorizontalScrollIndicator:NO];
        [image_scroll setShowsVerticalScrollIndicator:NO];

        image_scroll.tag=i+1;
        // image_scroll.backgroundColor=[UIColor purpleColor];
        image_scroll.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
        self.image_view.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

        image_scroll.contentSize = CGSizeMake(self.image_view.bounds.size.width-500, self.image_view.bounds.size.height-300);
        image_scroll.decelerationRate = UIScrollViewDecelerationRateFast;
        [image_scroll setMaximumZoomScale:4.0];
       // image_scroll.minimumZoomScale = 1.0;
        [image_scroll setZoomScale:[image_scroll minimumZoomScale]];
        //image_scroll.zoomScale = 1.0;
        [image_scroll addSubview:self.image_view];

        [scrollView addPage:image_scroll];

    }
    scrollView.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
    scrollView.tag=0;
    [self.scrollVw addSubview:scrollView];

    [scrollView scrollToPageWithIndex:self.selected_index animated:YES];
}

- (void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer
{
    NSLog(@"twoFingerPinch");
    float newScale = [image_scroll zoomScale] / 2.0;
    CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[recognizer locationInView:recognizer.view]];
    [image_scroll zoomToRect:zoomRect animated:YES];
}

- (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer {
    // zoom in
    NSLog(@"handleDoubleTap");
     UIScrollView *imageScroll = (UIScrollView *)[self.view viewWithTag:self.selected_index+1];

    float newScale = [imageScroll zoomScale] * 2.0;

    if (newScale > imageScroll.maximumZoomScale){
        newScale = imageScroll.minimumZoomScale;
        CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]];

        [imageScroll zoomToRect:zoomRect animated:YES];

    }
    else{

        newScale = imageScroll.maximumZoomScale;
        CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]];

        [imageScroll zoomToRect:zoomRect animated:YES];
    }
}

#pragma mark Utility methods

- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center {
    CGRect zoomRect;

    // the zoom rect is in the content view's coordinates.
    //    At a zoom scale of 1.0, it would be the size of the imageScrollView's bounds.
    //    As the zoom scale decreases, so more content is visible, the size of the rect grows.
    zoomRect.size.height = [image_scroll frame].size.height / scale;
    zoomRect.size.width  = [image_scroll frame].size.width  / scale;

    // choose an origin so as to get the right center.
    zoomRect.origin.x    = center.x - (zoomRect.size.width  / 2.0);
    zoomRect.origin.y    = center.y - (zoomRect.size.height / 2.0);

    return zoomRect;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView1
{
    UIScrollView *imageScroll = (UIScrollView *)[self.view viewWithTag:self.selected_index+1];
    if(scrollView1.tag ==0){
        CGFloat pageWidth = scrollView1.frame.size.width;
        current_page = floor((scrollView1.contentOffset.x - pageWidth / 2.0) / pageWidth) + 1;
        self.selected_index=current_page;
        self.lblHeader.text=[NSString stringWithFormat:@"%ld of %lu",self.selected_index+1,(unsigned long)[self.PhotoImgArr count]];

    }
    else
    {
        CGFloat offsetX = (imageScroll.bounds.size.width > imageScroll.contentSize.width)?
        (imageScroll.bounds.size.width - imageScroll.contentSize.width) * 0.5 : 0.0;
        CGFloat offsetY = (imageScroll.bounds.size.height > imageScroll.contentSize.height)?
        (imageScroll.bounds.size.height - imageScroll.contentSize.height) * 0.5 : 0.0;
        [scrollView1.subviews objectAtIndex:0].center = CGPointMake(imageScroll.contentSize.width * 0.5 + offsetX,imageScroll.contentSize.height * 0.5 + offsetY);
    }

}

-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView1
{
    if([scrollView1.subviews count]>0){
        return [scrollView1.subviews objectAtIndex:0];

    }
    return nil;
}
-(无效)幻灯片放映
{
[滚动视图从SuperView移除];
scrollView=[[REPagedScrollView alloc]initWithFrame:self.scrollVw.bounds];
scrollView.delegate=self;
scrollView.pageControl.pageIndicatorTintColor=[UIColor clearColor];
scrollView.pageControl.currentPageIndicatorTintColor=[UIColor clearColor];
当前页面=0;
对于(int i=0;i imageScroll.maximumZoomScale){
newScale=imageScroll.minimumZoomScale;
CGRect zoomRect=[self zoomRectForScale:newScale with Center:[GestureRecognitor Location查看:GestureRecognitor.view]];
[imageScroll zoomToRect:zoomRect动画:是];
}
否则{
newScale=imageScroll.maximumZoomScale;
CGRect zoomRect=[self zoomRectForScale:newScale with Center:[GestureRecognitor Location查看:GestureRecognitor.view]];
[imageScroll zoomToRect:zoomRect动画:是];
}
}
#pragma标记实用程序方法
-(CGRect)缩放比例:(浮点)带中心的缩放比例:(CGPoint)中心{
CGRect-zoomRect;
//缩放矩形位于内容视图的坐标中。
//缩放比例为1.0时,它将是imageScrollView边界的大小。
//随着缩放比例的减小,更多的内容可见,矩形的大小也随之增大。
zoomRect.size.height=[image\u滚动框].size.height/scale;
zoomRect.size.width=[image\u滚动框].size.width/scale;
//选择一个原点以获得正确的中心。
zoomRect.origin.x=center.x-(zoomRect.size.width/2.0);
zoomRect.origin.y=center.y-(zoomRect.size.height/2.0);
返回zoomRect;
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView1
{
UIScrollView*imageScroll=(UIScrollView*)[self.view视图带标记:self.selected_index+1];
如果(scrollView1.tag==0){
CGFloat pageWidth=scrollView1.frame.size.width;
当前页面=楼层((scrollView1.contentOffset.x-pageWidth/2.0)/pageWidth)+1;
self.selected\u index=当前页面;
self.lblHeader.text=[NSString stringWithFormat:@“%ld of%lu”,self.selected_索引+1,(无符号长)[self.PhotoImgArr计数];
}
其他的
{
CGFloat offsetX=(imageScroll.bounds.size.width>imageScroll.contentSize.width)?
(imageScroll.bounds.size.width-imageScroll.contentSize.width)*0.5:0.0;
CGFloat offsetY=(imageScroll.bounds.size.height>imageScroll.contentSize.height)?
(imageScroll.bounds.size.height-imageScroll.contentSize.height)*0.5:0.0;
[scrollView1.subviews对象索引:0].center=CGPointMake(imageScroll.contentSize.width*0.5+offsetX,imageScroll.contentSize.height*0.5+offsetY);
}
}
-(UIView*)视图用于缩放CrollView:(UICrollView*)滚动视图1
{
如果([scrollView1.subviews count]>0){
返回[scrollView1.subviews对象索引:0];
}
返回零;
}

好的,首先,不要使用
REPagedScrollView
相反,您可以通过更改视图的
x
位置将页面设置为滚动视图,这对您的
缩放非常有用,如果您使用
REPagedScrollView
则无法将子视图设置为滚动视图会有一些复杂情况,相反,你会得到一个
UIView
实例

最好使用普通的
UIScrollView
这对您的情况有好处,还可以像在
REPagedScrollView
中一样在视图控制器的视图中单独设置
UIPageControl

首先设置页面,如下所示

- (void)viewDidLoad {
 [super viewDidLoad];
 // Do any additional setup after loading the view, typically from a nib.
 _scrollPager = [[UIScrollView alloc] initWithFrame:self.view.bounds];
 _scrollPager.delegate=self;
 _scrollPager.pagingEnabled = YES;
 _current_page=0;
 _prev_next_index = 0;

 _PhotoImgArr = [[NSMutableArray alloc] initWithObjects:@"00.jpg",@"01.jpg",@"02.jpg",@"03.jpg", nil];
 CGSize totalContentSize = CGSizeMake(self.view.bounds.size.width  [_PhotoImgArr count], self.view.bounds.size.height);
 _scrollPager.contentSize = totalContentSize;
 [self.view addSubview:_scrollPager];
 [self setUpPager];
}

- (void)setUpPager
{
       for(int i=0;i<[self.PhotoImgArr count];i++)
   {
    // Image view
    UIScrollView  *image_scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(i * self.view.bounds.size.width, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    UIImageView   *image_view = [[UIImageView alloc] initWithFrame:image_scroll.bounds];
    image_view.backgroundColor=[UIColor clearColor];
    image_view.clipsToBounds = true;
    image_view.image = [UIImage imageNamed:_PhotoImgArr[i]];

    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    [doubleTap setNumberOfTapsRequired:2];
    [image_scroll setDelegate:self];
    [image_scroll setShowsHorizontalScrollIndicator:NO];
    [image_scroll setShowsVerticalScrollIndicator:NO];

    image_scroll.tag=i;
    image_scroll.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
    image_view.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

    image_scroll.contentSize = image_scroll.bounds.size;
    image_scroll.decelerationRate = UIScrollViewDecelerationRateFast;

    image_scroll.minimumZoomScale = 1.0f;
    image_scroll.maximumZoomScale = 3.0f;

    [image_scroll addSubview:image_view];
    [image_scroll addGestureRecognizer:doubleTap];
    [_scrollPager addSubview:image_scroll];
   }
   _scrollPager.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
   _scrollPager.tag=100;
 }
对于scrollview,有一件事你不需要处理夹点,它会自动处理缩放

最后是缩放的处理

#pragma mark Utility methods
- (CGRect)zoomRectForScrollView:(UIScrollView *)scrollView withScale:(float)scale withCenter:(CGPoint)center
{
   CGRect zoomRect;

   zoomRect.size.height = scrollView.frame.size.height / scale;
   zoomRect.size.width  = scrollView.frame.size.width  / scale;

   zoomRect.origin.x = center.x - (zoomRect.size.width  / 2.0);
   zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0);
   return zoomRect;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView1
{
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
  if(scrollView == _scrollPager)
  {
     float currentPage = scrollView.contentOffset.x /scrollView.frame.size.width;
     if(currentPage != _current_page)
     {
         _prev_next_index = _current_page;
         _current_page = ceil(currentPage);
         [self resetScrollerAtViewIndex:_prev_next_index];
     }
  }
}


-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView1
{
  if(scrollView1 == _scrollPager)
      return nil;
  else
  {
      UIScrollView  *image_scroll = [self getImageScroller];
      if(image_scroll)
          if([image_scroll.subviews count]>0)
          {
              return [image_scroll.subviews objectAtIndex:0];
          }
   }
   return nil;
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

- (UIScrollView *)getImageScroller
{
  return  [_scrollPager viewWithTag:_current_page];
}

- (void)resetScrollerAtViewIndex:(NSInteger)index
{

   UIScrollView *scrollView = [_scrollPager viewWithTag:index];
   CGFloat zoomScale = scrollView.zoomScale;
  if(zoomScale != 1.0)
      [scrollView setZoomScale:1 animated:YES];
}
返回上一页或下一页时编辑以缩小 只需替换下面的方法

- (void)resetScrollerAtViewIndex:(NSInteger)index
{
  //CGFloat zoomScale = 1.0;
  UIScrollView *scrollView = [_scrollPager viewWithTag:index];
  CGRect rectToZoomTo = CGRectZero;

  rectToZoomTo = [self zoomRectForScrollView:scrollView withScale:1 withCenter:self.view.center];
  [scrollView zoomToRect:self.view.bounds animated:YES];
  [scrollView setContentOffset:CGPointZero];
  [scrollView setContentSize:self.view.bounds.size];
} 

好的,首先,不要使用
REPagedScrollView
,你可以通过改变视图的
x
位置将页面设置为scrollview,这对你的
缩放非常有用,如果你使用
REPagedScrollView
会有一些麻烦,你无法将子视图设置为scrollview,相反,你会得到一个
UIView
实例

最好使用普通的
UIScrollView
这对您的情况有好处,还可以像在
REPagedScrollView
中一样在视图控制器的视图中单独设置
UIPageControl

首先设置页面,如下所示

- (void)viewDidLoad {
 [super viewDidLoad];
 // Do any additional setup after loading the view, typically from a nib.
 _scrollPager = [[UIScrollView alloc] initWithFrame:self.view.bounds];
 _scrollPager.delegate=self;
 _scrollPager.pagingEnabled = YES;
 _current_page=0;
 _prev_next_index = 0;

 _PhotoImgArr = [[NSMutableArray alloc] initWithObjects:@"00.jpg",@"01.jpg",@"02.jpg",@"03.jpg", nil];
 CGSize totalContentSize = CGSizeMake(self.view.bounds.size.width  [_PhotoImgArr count], self.view.bounds.size.height);
 _scrollPager.contentSize = totalContentSize;
 [self.view addSubview:_scrollPager];
 [self setUpPager];
}

- (void)setUpPager
{
       for(int i=0;i<[self.PhotoImgArr count];i++)
   {
    // Image view
    UIScrollView  *image_scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(i * self.view.bounds.size.width, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    UIImageView   *image_view = [[UIImageView alloc] initWithFrame:image_scroll.bounds];
    image_view.backgroundColor=[UIColor clearColor];
    image_view.clipsToBounds = true;
    image_view.image = [UIImage imageNamed:_PhotoImgArr[i]];

    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    [doubleTap setNumberOfTapsRequired:2];
    [image_scroll setDelegate:self];
    [image_scroll setShowsHorizontalScrollIndicator:NO];
    [image_scroll setShowsVerticalScrollIndicator:NO];

    image_scroll.tag=i;
    image_scroll.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
    image_view.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

    image_scroll.contentSize = image_scroll.bounds.size;
    image_scroll.decelerationRate = UIScrollViewDecelerationRateFast;

    image_scroll.minimumZoomScale = 1.0f;
    image_scroll.maximumZoomScale = 3.0f;

    [image_scroll addSubview:image_view];
    [image_scroll addGestureRecognizer:doubleTap];
    [_scrollPager addSubview:image_scroll];
   }
   _scrollPager.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
   _scrollPager.tag=100;
 }
对于scrollview,有一件事你不需要处理夹点,它会自动处理缩放

最后是缩放的处理

#pragma mark Utility methods
- (CGRect)zoomRectForScrollView:(UIScrollView *)scrollView withScale:(float)scale withCenter:(CGPoint)center
{
   CGRect zoomRect;

   zoomRect.size.height = scrollView.frame.size.height / scale;
   zoomRect.size.width  = scrollView.frame.size.width  / scale;

   zoomRect.origin.x = center.x - (zoomRect.size.width  / 2.0);
   zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0);
   return zoomRect;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView1
{
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
  if(scrollView == _scrollPager)
  {
     float currentPage = scrollView.contentOffset.x /scrollView.frame.size.width;
     if(currentPage != _current_page)
     {
         _prev_next_index = _current_page;
         _current_page = ceil(currentPage);
         [self resetScrollerAtViewIndex:_prev_next_index];
     }
  }
}


-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView1
{
  if(scrollView1 == _scrollPager)
      return nil;
  else
  {
      UIScrollView  *image_scroll = [self getImageScroller];
      if(image_scroll)
          if([image_scroll.subviews count]>0)
          {
              return [image_scroll.subviews objectAtIndex:0];
          }
   }
   return nil;
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

- (UIScrollView *)getImageScroller
{
  return  [_scrollPager viewWithTag:_current_page];
}

- (void)resetScrollerAtViewIndex:(NSInteger)index
{

   UIScrollView *scrollView = [_scrollPager viewWithTag:index];
   CGFloat zoomScale = scrollView.zoomScale;
  if(zoomScale != 1.0)
      [scrollView setZoomScale:1 animated:YES];
}
返回上一页或下一页时编辑以缩小 只需替换下面的方法

- (void)resetScrollerAtViewIndex:(NSInteger)index
{
  //CGFloat zoomScale = 1.0;
  UIScrollView *scrollView = [_scrollPager viewWithTag:index];
  CGRect rectToZoomTo = CGRectZero;

  rectToZoomTo = [self zoomRectForScrollView:scrollView withScale:1 withCenter:self.view.center];
  [scrollView zoomToRect:self.view.bounds animated:YES];
  [scrollView setContentOffset:CGPointZero];
  [scrollView setContentSize:self.view.bounds.size];
} 

Hi@Shankar BS仅在视图中显示第一个图像,但滚动被禁用,我们无法滚动图像。。请提供任何线索。Hi@Shankar BS仅第一张图像显示在视图中,但滚动被禁用,我们无法滚动图像。。有什么线索吗。