手勢相關二:UIGestureRecongnizer捏合/旋轉


//*******************************1.遵循手勢協議並創建視圖*******************************

//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.scaleges.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;


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章