我的UImageView
中有IB
,并在UImageView
上添加了地图图片。我想让那个图像捏缩放。
这是我的代码:
- (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
即将到来,但我的形象没有任何变化
提前谢谢。
答案 0 :(得分:3)
在UIScrollViewDelegate
文件中添加ViewController.h
然后将以下代码添加到ViewController.m
文件
如果您使用此代码
,则无需添加UIPinchGestureRecognizer
- (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
- (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进行缩放
- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.mapImageView;
}
为避免UIScrollView在zoomimg上的奇怪行为,请使用此方法
- (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上调用上面的方法
- (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。我从那个链接学到了这个技术。
答案 1 :(得分:2)
试试这个
//At ViewDidLoad (OR whare you create your mapImageView)
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[mapImageView addGestureRecognizer:pinchRecognizer];
mapImageView.userInteractionEnabled=YES;
-(void)scale:(id)sender {
[YourView bringSubviewToFront:[(UIPinchGestureRecognizer*)sender view]];
if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
lastScale = 1.0; //global float variable.
return;
}
CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);
CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
[[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];
}
答案 2 :(得分:0)
在没有scrollView
的情况下执行此操作,将此代码段添加到您的班级:
-(void) addGesturesTo : (UIImageView *) imageView{
// Register for double-finger dragging to pan the camera.
UIPinchGestureRecognizer* pinchGestureReconizer = [[UIPinchGestureRecognizer alloc] initWithTarget: self action: @selector(handlePich:)];
[imageView addGestureRecognizer:pinchGestureReconizer];
}
- (void) handlePich: (UIPinchGestureRecognizer *) pinchGestureRecognizer{
CGFloat scale = pinchGestureRecognizer.scale;
[[pinchGestureRecognizer view] setTransform:CGAffineTransformScale([pinchGestureRecognizer view].transform, scale, scale)];
pinchGestureRecognizer.scale = 1.0;
}
现在使用addGesturesTo
致电imageView
。为:
[self addGesturesTo:imageView];
使用ScrollView执行此操作:请按照以下步骤操作:
scrollView
设置委托添加到自我imageView
scrolView
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
并返回imageView