2013-08-23 2 views
3

Я делаю проект, в котором мне нужно два изображения в одном прокрутке с параметрами масштабирования. UIScrollView позволяет одному виду легко масштабировать. Но моя проблема не такая. У меня есть два изображения в бок о бок в представлении прокрутки. Когда я пытаюсь увеличить изображение, которое не работает, есть ли возможность одновременно изменять два изображения одновременно. Пожалуйста, предложите мне некоторые идеи.Pinch Zoom on Two ImageViews в Single ScrollView на IOS

Заранее спасибо

+0

так что ваша проблема в том, что при увеличении масштаба, ваши два изображения должны быть зум ... Я прав??? – NiravPatel

+0

Да, вы правы – btmanikandan

+1

Я думаю, вы должны добавить два изображения в одном представлении, а в методе viewForZooming вы должны вернуть это представление. –

ответ

0

добавить как ImageView в представлении и заменить этот метод

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return view; 
} 
2

Вот код для масштабирования двух изображений в одном Scrollview

Я добавил два UIImageView «с в одном UIView, а затем я добавил UIView к UIScrollView. Ниже мой код:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.vwImages = [[UIView alloc]initWithFrame:CGRectMake(0, 0,100,200)]; 

    // 1 
    UIImage *image = [UIImage imageNamed:@"imgBaskteBall2.jpeg"]; 
    UIImageView *imageView1 = [[UIImageView alloc] initWithImage:image]; 
    imageView1.frame = CGRectMake(0,0,100,100); 
    [self.vwImages addSubview:imageView1]; 

    UIImage *image2 = [UIImage imageNamed:@"imgBaskteBall1.jpeg"]; 
    UIImageView *imageView2 = [[UIImageView alloc] initWithImage:image2]; 
    imageView2.frame = CGRectMake(0, 100, 100, 100); 
    [self.vwImages addSubview:imageView2]; 

    // 2 

    [self.scrollView addSubview:self.vwImages]; 

    self.scrollView.contentSize = self.vwImages.frame.size; 

    // 3 
    UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewDoubleTapped:)]; 
    doubleTapRecognizer.numberOfTapsRequired = 2; 
    doubleTapRecognizer.numberOfTouchesRequired = 1; 
    [self.scrollView addGestureRecognizer:doubleTapRecognizer]; 

    UITapGestureRecognizer *twoFingerTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewTwoFingerTapped:)]; 
    twoFingerTapRecognizer.numberOfTapsRequired = 1; 
    twoFingerTapRecognizer.numberOfTouchesRequired = 2; 
    [self.scrollView addGestureRecognizer:twoFingerTapRecognizer]; 
} 


- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    // 4 
    CGRect scrollViewFrame = self.scrollView.frame; 
    CGFloat scaleWidth = scrollViewFrame.size.width/self.scrollView.contentSize.width; 
    CGFloat scaleHeight = scrollViewFrame.size.height/self.scrollView.contentSize.height; 
    CGFloat minScale = MIN(scaleWidth, scaleHeight); 
    self.scrollView.minimumZoomScale = minScale; 

    // 5 
    self.scrollView.maximumZoomScale = 10.0f; 
    self.scrollView.zoomScale = minScale; 

    // 6 
    [self centerScrollViewContents]; 
} 


- (void)centerScrollViewContents { 
    CGSize boundsSize = self.scrollView.bounds.size; 
    CGRect contentsFrame = self.vwImages.frame; 

    if (contentsFrame.size.width < boundsSize.width) { 
     contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width)/2.0f; 
    } else { 
     contentsFrame.origin.x = 0.0f; 
    } 

    if (contentsFrame.size.height < boundsSize.height) { 
     contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height)/2.0f; 
    } else { 
     contentsFrame.origin.y = 0.0f; 
    } 

    self.vwImages.frame = contentsFrame; 
} 

- (void)scrollViewDoubleTapped:(UITapGestureRecognizer*)recognizer { 
    // 1 
    CGPoint pointInView = [recognizer locationInView:self.imageView]; 

    // 2 
    CGFloat newZoomScale = self.scrollView.zoomScale * 1.5f; 
    newZoomScale = MIN(newZoomScale, self.scrollView.maximumZoomScale); 

    // 3 
    CGSize scrollViewSize = self.scrollView.bounds.size; 

    CGFloat w = scrollViewSize.width/newZoomScale; 
    CGFloat h = scrollViewSize.height/newZoomScale; 
    CGFloat x = pointInView.x - (w/2.0f); 
    CGFloat y = pointInView.y - (h/2.0f); 

    CGRect rectToZoomTo = CGRectMake(x, y, w, h); 

    // 4 
    [self.scrollView zoomToRect:rectToZoomTo animated:YES]; 
} 

- (void)scrollViewTwoFingerTapped:(UITapGestureRecognizer*)recognizer { 
    // Zoom out slightly, capping at the minimum zoom scale specified by the scroll view 
    CGFloat newZoomScale = self.scrollView.zoomScale/1.5f; 
    newZoomScale = MAX(newZoomScale, self.scrollView.minimumZoomScale); 
    [self.scrollView setZoomScale:newZoomScale animated:YES]; 
} 

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    // Return the view that you want to zoom 
    return self.vwImages; 
} 

- (void)scrollViewDidZoom:(UIScrollView *)scrollView { 
    // The scroll view has zoomed, so you need to re-center the contents 
    [self centerScrollViewContents]; 
} 
+0

'CGPoint pointInView = [распознаватель locationInView: self.imageView];' Как получить Imageview? – user2526811

2

Сделать объект UIView в качестве контейнера, например viewContainer

[viewContainer addSubView:imageView1]; 

[viewContainer addSubView:imageView2]; 

[scrollView addSubView:viewContainer]; 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return viewContainer; 
} 

Добавить