当用户需要根据自定义大小图片时,需要提供UIPinchGestureRecognizer来识别用户的手势。具体的步骤:
1、新建xcode工程,选择View-based Application,工程名
PhotoPanDemo
2、添加一张图片到Resources目录下,这里的图片命名为
feiche.jpg
3、打开PhotoPanDemoViewController.h
文件,创建UIImageView和UIView对象并添加手势的委托类,代码:
#import <UIKit/UIKit.h>
@interface PhotoPanDemoViewController : UIViewController <UIGestureRecognizerDelegate>{
UIImageView *imageView;
CGFloat lastScale;
UIView *holderView;
}
-(void)scale:(id)sender;
@end
4、打开PhotoPanDemoViewController.m文件,代码:
//
// PhotoPanDemoViewController.m
// PhotoPanDemo
//
// Created by jordy on 11-4-6.
// Copyright 2011 vsp. All rights reserved.
//
#import "PhotoPanDemoViewController.h"
@implementation PhotoPanDemoViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIView *rootView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
rootView.backgroundColor = [UIColor yellowColor];
self.view = rootView;
UIImage *image = [UIImage imageNamed:@"feiche.jpg"];
holderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
imageView = [[UIImageView alloc] initWithFrame:[holderView frame]];
[imageView setImage:image];
[holderView addSubview:imageView];
//拧的手势
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc]
initWithTarget:self action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[holderView addGestureRecognizer:pinchRecognizer];
[rootView addSubview:holderView];
[rootView release];
}
-(void)scale:(id)sender {
[self.view bringSubviewToFront:[(UIPinchGestureRecognizer*)sender view]];
//当手指离开屏幕时,将lastscale设置为1.0
if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
lastScale = 1.0;
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];
lastScale = [(UIPinchGestureRecognizer*)sender scale];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return ![gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
}
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
[imageView release];
[holderView release];
}
@end
5、运行程序,效果如图:
原始图片大小 缩小后的图片 放大的图片
注意:请在真机上运行,在模拟器中无法模拟Pinch手势