//1.1遵循手势协议
@interface ViewController : UIViewController<UIGestureRecognizerDelegate>
//1.2创建视图
- (void)createImageView
{
UIImageView *imageView = [[UIImageView alloc]init];
imageView.frame = CGRectMake(50, 100, 275, 447);
imageView.image = [UIImage imageNamed:@"angry_06.jpg"];
imageView.tag = 100;
//设置视图的交互性
imageView.userInteractionEnabled = YES;
[self.view addSubview:imageView];
}
//*******************************2.创建手势*******************************
//2.1创建捏合手势
- (void)createPinchGestureRecongnizer
{
UIPinchGestureRecognizer *pinchGes = [[UIPinchGestureRecognizer alloc]init];
//手势添加方法
[pinchGes addTarget:self action:@selector(pinchGes:)];
//获取视图对象
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:100];
//往视图上添加手势
[imageView addGestureRecognizer:pinchGes];
//设置手势的代理对象
pinchGes.delegate = self;
}
//2.2创建旋转手势
- (void)createRotetionRecongnizer
{
UIRotationGestureRecognizer *rotetionGes = [[UIRotationGestureRecognizer alloc]init];
[rotetionGes addTarget:self action:@selector(rotetionGes:)];
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:100];
//往视图上添加手势
[imageView addGestureRecognizer:rotetionGes];
//设置手势的代理对象
rotetionGes.delegate = self;
}
//***************************3.创建手势处理方法***************************
//3.1创建处理缩放手势方法
- (void)pinchGes:(UIPinchGestureRecognizer *)ges
{
CGFloat scale = ges.scale;
//构建一个CGAffineTransform的结构体,返回一个修改了视图缩放比例的结构体
//参数1(CGAffineTransform t):代表了原视图在坐标系中的位移,缩放,旋转角度等信息
//参数2(CGFloat sx):在x方向的缩放比例
//参数3(CGFloat sy):在y方向的缩放比例
//CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)
ges.view.transform = CGAffineTransformScale(ges.view.transform,ges.scale, ges.scale);
//缩放比例每一次缩放结束都要初始化为1,下次的缩放操作将基于上次的缩放结果,防止连续叠加
ges.scale = 1;
}
//3.2创建处理旋转手势方法
- (void)rotetionGes:(UIRotationGestureRecognizer *)ges
{
NSLog(@"retetionGes:%f",ges.rotation);
//构建一个CGAffineTransform的结构体,返回一个修改了视图旋转的结构体
//参数1(CGAffineTransform t):代表了原视图在坐标系中的位移,缩放,旋转角度等信息
//参数2(CGFloat sx):旋转角度
//根据当前手势的视图信息旋转参数2指定的角度,得到新的结构体
ges.view.transform = CGAffineTransformRotate(ges.view.transform, ges.rotation);
//每一次旋转后都应该将旋转的角度清零
ges.rotation = 0;
}
//*******************************4.调用协议手势方法*******************************
/**
* 是否支持参数1和参数2手势,这个方法在用户手势判定为一种手势的同时还能判定为其他类型的手势时调用
*
* @param gestureRecognizer 手势1:最先判定成功的手势
* @param gestureRecognizer 手势2:同时能判定成功的手势
*
* @return YES:支持 NO:不支持
*/
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}