当用户需要根据自定义大小图片时,需要提供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