您的位置:首页 > 移动开发 > IOS开发

ios开发手势事件。

2016-01-31 23:46 543 查看
 为了完成⼿手势识别,必须借助于⼿手势识别器----UIGestureRecognizer
•利⽤用UIGestureRecognizer,能轻松识别⽤用户在某个view上⾯面做的⼀一些常见⼿手势
 UIGestureRecognizer是⼀一个抽象类,定义了所有⼿手势的基本⾏行为,使⽤用它的⼦子类才 能处理具体的⼿手势
UITapGestureRecognizer(敲击)

UIPinchGestureRecognizer(捏合,⽤用于缩放) ➢ UIPanGestureRecognizer(拖拽)

UISwipeGestureRecognizer(轻扫)

UIRotationGestureRecognizer(旋转)

UILongPressGestureRecognizer(长按)

敲击事件 UITapGestureRecognizer

- (void)testTap
{

    // 1.创建手势识别器对象

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer
alloc]
init];

    //
连续敲击2次,手势才能识别成功

    tap.numberOfTapsRequired =
2;

    tap.numberOfTouchesRequired =
2;

    tap.delegate =
self;

    // 2.添加手势识别器对象到对应的view

    [self.iconView
addGestureRecognizer:tap];

    

    // 3.添加监听方法(识别到了对应的手势,就会调用监听方法)
    [tap
addTarget:self
action:@selector(tapView)];
}

- (void)tapView
{

    NSLog(@"-----tapView");
}

/**

 *  当点击view的时候,会先调用这个方法,代理方法

 */
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch
*)touch
{
   
CGPoint pos = [touch locationInView:touch.view];
   
if (pos.x <=
self.iconView.frame.size.width *
0.5) {
       
return YES;
    }

    return
NO;
}

长按事件 UILongPressGestureRecognizer

- (void)testLongPress
{

    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer
alloc]
init];
    [longPress
addTarget:self
action:@selector(longPressView)];

    

    //
至少长按2秒

    longPress.minimumPressDuration =
2;

    

    //
在触发手势之前,50px范围内长按有效
    longPress.allowableMovement =
50;

    

    [self.redView
addGestureRecognizer:longPress];
}

- (void)longPressView
{

    NSLog(@"长按了红色的view");
}

清扫事件 UISwipeGestureRecognizer
- (void)viewDidLoad
{

    [super
viewDidLoad];

    

    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer
alloc]
initWithTarget:self
action:@selector(swipeView)];

    //只能设置一个方向

    swipe.direction =
UISwipeGestureRecognizerDirectionUp;

    

    [self.redView
addGestureRecognizer:swipe];
}

- (void)swipeView
{

    NSLog(@"swipeView");
}

捏合手势 UIPinchGestureRecognizer

#pragma mark - 缩放手势(捏合手势)
- (void)testPinch
{

    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer
alloc]
initWithTarget:self
action:@selector(pinchView:)];
    pinch.delegate =
self;

    [self.iconView
addGestureRecognizer:pinch];
}

- (void)pinchView:(UIPinchGestureRecognizer *)pinch
{
    pinch.view.transform =
CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);
    pinch.scale =
1; // 这个真的很重要!!!!!
}

旋转手势 UIRotationGestureRecognizer

#pragma mark - 旋转手势
- (void)testRotate
{

    UIRotationGestureRecognizer *recognizer = [[UIRotationGestureRecognizer
alloc]
initWithTarget:self
action:@selector(rotateView:)];
    recognizer.delegate =
self;
    [self.iconView
addGestureRecognizer:recognizer];
}

- (void)rotateView:(UIRotationGestureRecognizer *)recognizer
{
    recognizer.view.transform =
CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
    recognizer.rotation =
0; // 这个很重要!!!!!
}

/**

 *  是否允许多个手势识别器同时有效 

 *  Simultaneously : 同时地

 */
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer
*)otherGestureRecognizer
{

    return
YES;
}

拖拽手势 UIPanGestureRecognizer

- (void)viewDidLoad
{

    [super
viewDidLoad];

    

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer
alloc]
initWithTarget:self
action:@selector(panView:)];

    [self.purpleView
addGestureRecognizer:pan];
}

- (void)panView:(UIPanGestureRecognizer *)pan
{

    
   
switch (pan.state) {

        case
UIGestureRecognizerStateBegan: //
开始触发手势

            
           
break;

            

        case
UIGestureRecognizerStateEnded: //
手势结束

            
           
break;

            
       
default:
           
break;
    }

    

    // 1.在view上面挪动的距离
   
CGPoint translation = [pan translationInView:pan.view];
   
CGPoint center = pan.view.center;
    center.x += translation.x;
    center.y += translation.y;
    pan.view.center = center;

    

    // 2.清空移动的距离

    [pan setTranslation:CGPointZero
inView:pan.view];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息