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

标签 ios uiimageview zooming

在我的 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;
}

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

我希望我自己解释清楚了。

我该怎么办?

最佳答案

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

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

在UIScrollView的documentation中您可以找到与缩放专门相关的好例子。

关于ios - 缩放 UIImageView 并在缩放范围内移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20671540/

相关文章:

iphone - 正确分配/取消分配 UINavigationControllerDelagate

iphone - 在iphone应用程序开发中如何添加两个uiimageview并将其保存到iphone照片库?

javascript - 缩略图悬停缩放(放大)w/CSS3 和 javascript z 轴问题

css - 缩小时更改元素的位置

ios - 无法将使用代码创建的 socket 连接到静态单元格

iphone - 我想使用委托(delegate)创建 UITabbarController,UINavigationController

ios - uiimageview animationImages with uiimage "resizableImageWithCapInsets"

android - 如何限制缩小android

ios - 具有偏移量的单元格滚动百分比

objective-c - iOS UIImageView 流畅的图像呈现