在视图中创建手势识别器UIGestureRecognizers
- - (void)viewDidLoad {
- [super viewDidLoad];
- UIPinchGestureRecognizer *pinchRecognizer = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)] autorelease];
- [pinchRecognizer setDelegate:self];
- [self.view addGestureRecognizer:pinchRecognizer];
- UIRotationGestureRecognizer *rotationRecognizer = [[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)] autorelease];
- [rotationRecognizer setDelegate:self];
- [self.view addGestureRecognizer:rotationRecognizer];
- UIPanGestureRecognizer *panRecognizer = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)] autorelease];
- [panRecognizer setMinimumNumberOfTouches:1];
- [panRecognizer setMaximumNumberOfTouches:1];
- [panRecognizer setDelegate:self];
- [canvas addGestureRecognizer:panRecognizer];
- UITapGestureRecognizer *tapProfileImageRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)] autorelease];
- [tapProfileImageRecognizer setNumberOfTapsRequired:1];
- [tapProfileImageRecognizer setDelegate:self];
- [canvas addGestureRecognizer:tapProfileImageRecognizer];
- }
下面是响应各手势消息的方法:
- // 缩放
- -(void)scale:(id)sender {
- if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
- _lastScale = 1.0;
- }
- CGFloat scale = 1.0 - (_lastScale - [(UIPinchGestureRecognizer*)sender scale]);
- CGAffineTransform currentTransform = photoImage.transform;
- CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
- [photoImage setTransform:newTransform];
- _lastScale = [(UIPinchGestureRecognizer*)sender scale];
- [self showOverlayWithFrame:photoImage.frame];
- }
- // 旋转
- -(void)rotate:(id)sender {
- if([(UIRotationGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
- _lastRotation = 0.0;
- return;
- }
- CGFloat rotation = 0.0 - (_lastRotation - [(UIRotationGestureRecognizer*)sender rotation]);
- CGAffineTransform currentTransform = photoImage.transform;
- CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);
- [photoImage setTransform:newTransform];
- _lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
- [self showOverlayWithFrame:photoImage.frame];
- }
- // 移动
- -(void)move:(id)sender {
- CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:canvas];
- if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
- _firstX = [photoImage center].x;
- _firstY = [photoImage center].y;
- }
- translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);
- [photoImage setCenter:translatedPoint];
- [self showOverlayWithFrame:photoImage.frame];
- }
来源: http://www.phpxs.com/code/1005430/