2013-12-19 7 views
0

в моем UIScrollview У меня есть UIImageView с черным фоном. Внутри него есть еще один UIImageView с UIImage внутри, и я использую этот код, чтобы включить зум:Масштабирование UIImageView и перемещение внутри зум

fullImageView = [[UIView alloc] initWithFrame:CGRectMake(0,0,screenWidth,screenHeight)]; 
fullImageView.backgroundColor = [UIColor blackColor]; 

[fullImageView addSubview:copyImageToShowImageView]; 

zoomFullImageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,screenWidth,screenHeight)]; 

[zoomFullImageScrollView addSubview:fullImageView]; 

[self.view addSubview:zoomFullImageScrollView]; 

UIPinchGestureRecognizer *twoFingerTapRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapImage:)]; 

[copyImageToShowImageView addGestureRecognizer:twoFingerTapRecognizer]; 


//Then.. 

- (void)doubleTapImage:(UIPinchGestureRecognizer *)gesture{ 

if (gesture.state == UIGestureRecognizerStateEnded 
    || gesture.state == UIGestureRecognizerStateChanged) { 

    CGFloat currentScale = copyImageToShowImageView.frame.size.width/copyImageToShowImageView.bounds.size.width; 
    CGFloat newScale = currentScale * gesture.scale; 

    NSLog(@"gesture.scale = %f", currentScale * gesture.scale); 

    if (newScale < 1) { 
     newScale = 1; 
    } 
    if (newScale > 100) { 
     newScale = 100; 
    } 

    CGAffineTransform transform = CGAffineTransformMakeScale(newScale, newScale); 
    copyImageToShowImageView.transform = transform; 
    gesture.scale = 1; 

    copyImageToShowImageView.transform = CGAffineTransformTranslate(copyImageToShowImageView.transform, newScale, newScale); 
    zoomFullImageScrollView.contentSize=CGSizeMake(copyImageToShowImageView.frame.size.width, copyImageToShowImageView.frame.size.height); 
} 
} 

//and the methods: 

- (void)viewDidLoad { 

NSLog(@"super"); 

[super viewDidLoad]; 

zoomFullImageScrollView.minimumZoomScale=0.5; 
zoomFullImageScrollView.maximumZoomScale=6.0; 
zoomFullImageScrollView.delegate=self; 
} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ 

    return copyImageToShowImageView; 
} 

Этот код работает, но есть проблема, потому что размер контента Scrollview отличается от размера UIImageView. Возможно, они равны, но не выровнены. Тогда мне понравится, когда пользователь сделает масштабирование, изображение будет масштабироваться там, не всегда от центра, но это не важно.

Надеюсь, я объяснил сам.

Как я могу это сделать?

ответ

1

Если вы разместите UIImageView в UIScrollView, это упростит вашу жизнь.

Делегат UIScrollView реализует методы, специфичные для масштабирования. И поскольку он прокручивается, вы можете «перемещаться» по изображению.

В UIScrollView's documentation вы можете найти хорошие примеры, специально связанные с масштабированием.

+0

Я обновляю свой ответ, потому что у меня возникла другая проблема с использованием scrollview – lubilis

+0

. Проверить [это] (http://www.timoliver.com.au/2012/01/14/zooming-to-a-point-in-uiscrollview/) решение. Эта категория позволяет масштабировать до определенной точки. Я думаю, вам не нужно применять те преобразования, которые применяются. –

+0

Хорошо, я решил с помощью UIScrollView и его методов делегирования, спасибо! – lubilis

Смежные вопросы