缩放 UIImageView 并在缩放范围内移动

Posted

技术标签:

【中文标题】缩放 UIImageView 并在缩放范围内移动【英文标题】:Zooming UIImageView and moving inside the zoom 【发布时间】:2013-12-19 00:49:30 【问题描述】:

在我的 UIScrollview 中,我有一个黑色背景的 UIImageView。在它里面有另一个 UIImageView,里面有一个 UIImage,我使用这个代码来启用缩放:

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;

此代码有效,但存在问题,因为滚动视图内容大小与 UIImageView 大小不同。也许他们是平等的,但不是一致的。然后我希望当用户进行缩放时,图像会在那里缩放,并不总是从中心缩放,但这并不重要..

我希望我自己解释一下。

我该怎么办?

【问题讨论】:

【参考方案1】:

如果你把你的 UIImageView 放在 UIScrollView 中,它会让你的生活更轻松。

UIScrollView 委托实现特定于 Zoom 的方法。而且因为它是可滚动的,所以您可以在图像中“移动”。

在 UIScrollView 的documentation 中,您可以找到与缩放特别相关的好示例。

【讨论】:

我更新了我的答案,因为我在使用滚动视图时遇到了另一个问题 检查this 解决方案。此类别可以缩放到特定点。我认为您不需要应用正在应用的那些转换。 好的,我用 UIScrollView 及其委托方法解决了,谢谢!

以上是关于缩放 UIImageView 并在缩放范围内移动的主要内容,如果未能解决你的问题,请参考以下文章

在滚动视图内的 UIImageView 上捏缩放效果?

拖动、缩放和旋转多个 UIImageview

使用手势对UIImageView进行缩放旋转和移动

UIScrollView中的iPhone UIImageView没有缩放到中心

三个 UIImageView 水平堆叠并缩放

为 UIImageView 手动缩放 UIImage