如何使用或不使用ScrollView使ImageView可缩放。 [英] how to make an ImageView zoomable with or without ScrollView.?
问题描述
我的 IB
中有 UImageView
,并在 UImageView上添加了地图图片
。我想让那个图像捏缩放。
I have an UImageView
in my IB
and added a map image on that UImageView
. I want to make that image pinch zoomable.
这是我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Map";
self.mapImageView.contentMode = UIViewContentModeScaleAspectFit;
[self.mapScrollView addSubview:self.mapImageView];
[self.mapScrollView setContentSize:CGSizeMake(self.mapImageView.frame.size.width, self.mapImageView.frame.size.height)];
[self.mapScrollView setMinimumZoomScale:1.0];
[self.mapScrollView setMaximumZoomScale:4.0];
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.mapImageView;
}
但这没有帮助,我可以看到 UIScrollView
即将发生,但我的形象没有任何变化。
提前致谢。
but this doesn't help, I can see a UIScrollView
Coming but nothing happen to my image.
Thanks in advance.
推荐答案
在 ViewController.h
文件中添加 UIScrollViewDelegate
然后将以下代码添加到 ViewController.m
文件
then add following code to your ViewController.m
file
无需添加 UIPinchGestureRecognizer
如果您使用此代码
No need to add UIPinchGestureRecognizer
if your using this code
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
UIView* zoomView = [scrollView.delegate viewForZoomingInScrollView:scrollView];
CGRect zoomViewFrame = zoomView.frame;
if(zoomViewFrame.size.width < scrollView.bounds.size.width)
{
zoomViewFrame.origin.x = (scrollView.bounds.size.width - zoomViewFrame.size.width) / 2.0;
}
else
{
zoomViewFrame.origin.x = 0.0;
}
if(zoomViewFrame.size.height < scrollView.bounds.size.height)
{ zoomViewFrame.origin.y = (scrollView.bounds.size.height - zoomViewFrame.size.height) / 2.0;
}
else
{
zoomViewFrame.origin.y = 0.0;
}
zoomView.frame = zoomViewFrame;
}
更改 viewDidLoad
as关注
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapScrollView.delegate = self;
self.mapScrollView.minimumZoomScale = 1.0;
self.mapScrollView.maximumZoomScale = 4.0;
UIImage * myImage= [UIImage imageNamed:@"Background.png"]; //add your image here
[self.mapImageView setImage:myImage];
[self.mapImageView sizeToFit];
self.mapScrollView.contentSize = myImage.size;
}
指定imageView放大这里
Specify the imageView to zoom here
- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.mapImageView;
}
为了避免在zoomimg上使用UIScrollView的奇怪行为,请使用此方法
To avoid the strange behaviour of UIScrollView on zoomimg use this method
- (void)view:(UIView*)view setCenter:(CGPoint)centerPoint
{
CGRect viewFrame = view.frame;
CGPoint contentOffset = self.mapScrollView.contentOffset;
CGFloat x = centerPoint.x - viewFrame .size.width / 2.0;
CGFloat y = centerPoint.y - viewFrame .size.height / 2.0;
if(x < 0)
{
contentOffset.x = -x;
viewFrame .origin.x = 0.0;
}
else
{
viewFrame .origin.x = x;
}
if(y < 0)
{
contentOffset.y = -y;
viewFrame .origin.y = 0.0;
}
else
{
viewFrame .origin.y = y;
}
view.frame = viewFrame ;
self.mapScrollView.contentOffset = contentOffset;
}
然后在viewDidAppear上调用上述方法
Then call the above method on viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
CGPoint centerPoint = CGPointMake(CGRectGetMidX(self.mapScrollView.bounds),
CGRectGetMidY(self.mapScrollView.bounds));
[self view:self.mapImageView setCenter:centerPoint];
}
看看这个 link 如果您需要更多说明。我从那个链接学到了这个技术。
have a look at this link if you need more clarification. I learned this technique from that link.
这篇关于如何使用或不使用ScrollView使ImageView可缩放。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!