IOS 의 각종 제스처 조작 인 스 턴 스 코드

일단 효 과 를 볼 게 요.

손짓
IOS 에서 제스처 동작 은 보통 UIGesture Recognizer 류 의 몇 가지 제스처 서브 클래스 로 이 루어 집 니 다.보통 우리 가 사용 하 는 제스처 는 이렇게 5 가지 입 니 다.
1.클릭  UITapGestureRecognizer
2.이동  UIPanGestureRecognizer
3.크기 조정  UIPinchGestureRecognizer
4.회전  UIRotationGestureRecognizer
5.청소  UISwipeGestureRecognizer
우리 위의 이 실례 에서 위의 이 다섯 가지 제스처 를 사 용 했 지만,그 중에서 클릭 과 청소 가 나타 나 지 않 았 고,단지 로 그 를 출력 했 을 뿐,잠시 후에 코드 를 보 았 다
다음은 이 몇 가지 제스처 를 소개 하 겠 습 니 다.
1,UITapGesture Recognizer 클릭 제스처

UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)];
//     ,   1,1   ,2   
tapGes.numberOfTapsRequired = 2;
이 클릭 제스처 클래스 는 하나의 속성 이 있 습 니 다 numberOfTaps Required 는 클릭 수 를 설정 하 는 데 사 용 됩 니 다.몇 번 을 클릭 해 야 이 사건 을 촉발 할 수 있 습 니 다.
2,UIPanGesture Recognizer 이동 제스처

//     
- (void)initPanGes{
 UIPanGestureRecognizer* panGes = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)];
 [self.imgView addGestureRecognizer:panGes];
}
- (void)panGes:(UIPanGestureRecognizer*)ges{
 //         
 CGPoint transPoint = [ges translationInView:self.imgView];
}
이동 제스처 자체 에 설정 할 수 있 는 속성 이 많 지 않 습 니 다.이동 이벤트 에서 손 을 터치 하면 사용 할 수 있 습 니 다.  translationInView 방법 으로 현재 이동 좌표 점 획득
3,UIPinchGesture Recognizer 크기 조정 제스처

//     
- (void)initPinGes{
 UIPinchGestureRecognizer* pinGes = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinGes:)];
 [self.imgView addGestureRecognizer:pinGes];
}
- (void)pinGes:(UIPinchGestureRecognizer*)ges{
 //   
 self.imgView.transform = CGAffineTransformScale(self.imgView.transform, ges.scale, ges.scale);
}
크기 조정 제스처 는 이벤트 에서 scale 속성 을 가 져 올 수 있 습 니 다.현재 크기 조정 값 을 표시 합 니 다.
4、UIRotationGesture Recognizer 회전 제스처

//     
- (void)initRotation{
 UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)];
 [self.imgView addGestureRecognizer:rotationGes];
}
- (void)rotationGes:(UIRotationGestureRecognizer*)ges{
 //     
 self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation);
}
회전 제스처 는 이벤트 에서 rotation 속성 을 가 져 와 현재 회전 각 도 를 가 져 올 수 있 습 니 다.
5、UISwipeGesture Recognizer 손 동작 가볍게 쓸 기

//     
- (void)initSwipeGes{
 //              
 UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)];
 //   ,       
 //           ,               
 //          
 swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft;
 [self.imgView addGestureRecognizer:swipeLeftGes];
}
- (void)swipeGes:(UISwipeGestureRecognizer*)ges{
 // ges.direction   
 NSLog(@"%s diection:%lu",__func__,(unsigned long)ges.direction);
}
제스처 대상 을 가볍게 쓸 려 면 direction 속성 을 설정 해 야 합 니 다.기본적으로 왼쪽 에서 오른쪽으로 만 감청 합 니 다.이것 은 매 거 진 값 UI SwipeGesture Recognizer Direction 입 니 다.

UISwipeGestureRecognizerDirectionRight      (   )
UISwipeGestureRecognizerDirectionLeft       
UISwipeGestureRecognizerDirectionUp        
UISwipeGestureRecognizerDirectionDown      
우리 위 에 있 는 그 효과 도 구현 코드 를 살 펴 보 겠 습 니 다.

//
// ViewController.m
//       
//
// Created by xgao on 16/3/24.
// Copyright © 2016  xgao. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()<UIGestureRecognizerDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *imgView;
@end
@implementation ViewController
- (void)viewDidLoad {
 [super viewDidLoad];
 [self initTapGes];
 [self initPanGes];
 [self initPinGes];
 [self initRotation];
 [self initSwipeGes];
}
//     
- (void)initTapGes{
 UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)];
 //     ,   1,1   ,2   
 tapGes.numberOfTapsRequired = 2;
 tapGes.delegate = self;
 [self.imgView addGestureRecognizer:tapGes];
}
- (void)tapGes:(UITapGestureRecognizer*)ges{
 NSLog(@"%s",__func__);
}
//     
- (void)initPanGes{
 UIPanGestureRecognizer* panGes = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)];
 panGes.delegate = self;
 [self.imgView addGestureRecognizer:panGes];
}
- (void)panGes:(UIPanGestureRecognizer*)ges{
 //         
 CGPoint transPoint = [ges translationInView:self.imgView];
 //            
 self.imgView.transform = CGAffineTransformTranslate(self.imgView.transform, transPoint.x, transPoint.y);
 //   ,    
 //              
 [ges setTranslation:CGPointZero inView:self.imgView];
 NSLog(@"%s",__func__);
}
//     
- (void)initPinGes{
 UIPinchGestureRecognizer* pinGes = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinGes:)];
 pinGes.delegate = self;
 [self.imgView addGestureRecognizer:pinGes];
}
- (void)pinGes:(UIPinchGestureRecognizer*)ges{
 //   
 self.imgView.transform = CGAffineTransformScale(self.imgView.transform, ges.scale, ges.scale);
 //   
 //            
 ges.scale = 1;
}
//     
- (void)initRotation{
 UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)];
 rotationGes.delegate = self;
 [self.imgView addGestureRecognizer:rotationGes];
}
- (void)rotationGes:(UIRotationGestureRecognizer*)ges{
 //     
 self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation);
 //   
 //            
 ges.rotation = 0;
 NSLog(@"%s",__func__);
}
//     
- (void)initSwipeGes{
 //              
 UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)];
 //   ,       
 //           ,               
 //          
 swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft;
 swipeLeftGes.delegate = self;
 [self.imgView addGestureRecognizer:swipeLeftGes];
 //              
 UISwipeGestureRecognizer* swipeUpGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)];
 //          
 swipeUpGes.direction = UISwipeGestureRecognizerDirectionUp;
 swipeUpGes.delegate = self;
 [self.imgView addGestureRecognizer:swipeUpGes];
}
- (void)swipeGes:(UISwipeGestureRecognizer*)ges{
 // ges.direction   
 NSLog(@"%s diection:%lu",__func__,(unsigned long)ges.direction);
}
#pragma mark - UIGestureRecognizerDelegate
//          
- (BOOL)gestureRecognizerShouldBegin:(UITapGestureRecognizer *)gestureRecognizer{
 return YES;
}
//          ,      
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
 return YES;
}
@end

여기 서 주의해 야 할 것 은 두 가지 가 있다.
1.이동,크기 조정,회전 세 가지 제스처 에 대해 우 리 는 그 값 으로 처리 하려 면 복원 하 는 것 을 기억 해 야 합 니 다!복원!복원!그게 중요 해!중요 한 얘 기 는 세 번~
이동 제스처 에서 setTranslation:CGPointZero 를 설정 하여 좌표 값 을 복원 해 야 합 니 다.그렇지 않 으 면 다음 이벤트 에서 이 좌표 값 을 터치 하면 중첩 됩 니 다.
크기 조정 제스처 에 ges.scale=1 을 설정 하여 크기 조정 값 을 복원 합 니 다.
회전 제스처 에 ges.rotation=0 을 설정 하여 각도 값 을 복원 합 니 다.
2.만약 에 우리 가 여러 제스처 를 함께 사용 해 야 할 때 delegate 안의 인 자 를 되 돌려 주 는 방법 을 설정 해 야 합 니 다.

//          ,      
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
 return YES;
}
위 에서 말 한 것 은 소 편 이 소개 한 IOS 의 각종 제스처 조작 인 스 턴 스 코드 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기