6.18 Touch 手势

1,左滑
2,右滑
4,双击
5,当双击手势失败时,判断为单击手势
6,拖拽
7,缩放
8,旋转
9,长按
10,滑动
11,点击
12,拖拽
13,缩放
14,旋转
15,长按

//
//  UIGestureRecognizerViewController.m
//  demotest
//

#import "UIGestureRecognizerViewController.h"
#import <MediaPlayer/MediaPlayer.h>
@interface UIGestureRecognizerViewController () {

    UIView *_gestureView;
    UILabel *_gestureDisplay;
}

- (void)initializeUserInterface;
- (void)processgestureReconizer:(UIGestureRecognizer *)gesture;
- (void)positionAnimationWithDirection:(UISwipeGestureRecognizerDirection)direction;

@end

@implementation UIGestureRecognizerViewController

- (id)init {

    self = [super init];
    if (self) {

        self.title = @"UIGestureRecognizer";

    }
    return self;
}

- (void)dealloc {

    [_gestureView    release];
    [_gestureDisplay release];

    [super dealloc];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self initializeUserInterface];
}

- (void)initializeUserInterface {

    self.view.backgroundColor = [UIColor whiteColor];

    _gestureView = [[UIView alloc] init];
    _gestureView.bounds = CGRectMake(0, 0, 200, 200);
    _gestureView.center = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds));
    _gestureView.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0];
    _gestureView.layer.borderColor = [UIColor blackColor].CGColor;
    _gestureView.layer.borderWidth = 1.0;

    [self.view addSubview:_gestureView];

    _gestureDisplay = [[UILabel alloc] init];
    _gestureDisplay.bounds = CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 44);
    _gestureDisplay.center = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMinY(self.view.bounds) + 100);
    _gestureDisplay.textAlignment = NSTextAlignmentCenter;
    _gestureDisplay.font = [UIFont systemFontOfSize:25];
    _gestureDisplay.backgroundColor = [UIColor clearColor];
    [self.view addSubview:_gestureDisplay];

    // 左滑
    UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc]
                                           initWithTarget:self
                                           action:@selector(processgestureReconizer:)];
    leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft;
    [self.view addGestureRecognizer:leftSwipe];
    [leftSwipe release];

    // 右滑
    UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc]
                                            initWithTarget:self
                                            action:@selector(processgestureReconizer:)];
    rightSwipe.direction = UISwipeGestureRecognizerDirectionRight;
    [self.view addGestureRecognizer:rightSwipe];
    [rightSwipe release];

    // 单击
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]
                                         initWithTarget:self
                                         action:@selector(processgestureReconizer:)];
    singleTap.numberOfTapsRequired = 1;
    [_gestureView addGestureRecognizer:singleTap];
    [singleTap release];

    // 双击
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]
                                         initWithTarget:self
                                         action:@selector(processgestureReconizer:)];
    doubleTap.numberOfTapsRequired = 2;
    [_gestureView addGestureRecognizer:doubleTap];
    [doubleTap release];

    // 当双击手势失败时,判断为单击手势
    [singleTap requireGestureRecognizerToFail:doubleTap];

    // 拖拽
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(processgestureReconizer:)];
    [_gestureView addGestureRecognizer:pan];
    [pan release];

    // 缩放
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]
                                       initWithTarget:self
                                       action:@selector(processgestureReconizer:)];
    [_gestureView addGestureRecognizer:pinch];
    [pinch release];

    // 旋转
    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]
                                             initWithTarget:self
                                             action:@selector(processgestureReconizer:)];
    [_gestureView addGestureRecognizer:rotation];
    [rotation release];

    // 长按
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
                                               initWithTarget:self
                                               action:@selector(processgestureReconizer:)];
    longPress.minimumPressDuration = 2.0;
    [_gestureView addGestureRecognizer:longPress];
    [longPress release];
}

- (void)processgestureReconizer:(UIGestureRecognizer *)gesture {

    // 滑动
    if ([gesture isKindOfClass:[UISwipeGestureRecognizer class]]) {
        UISwipeGestureRecognizer *swipe = (UISwipeGestureRecognizer *)gesture;
        _gestureDisplay.text = swipe.direction == UISwipeGestureRecognizerDirectionLeft ? @"左滑" : @"右滑";
        [self positionAnimationWithDirection:swipe.direction];
    }
    // 点击
    else if ([gesture isKindOfClass:[UITapGestureRecognizer class]]) {
        UITapGestureRecognizer *tap = (UITapGestureRecognizer *)gesture;
        _gestureDisplay.text = tap.numberOfTapsRequired == 1 ? @"单击" : @"双击";
        _gestureView.transform = CGAffineTransformIdentity;
    }
    // 拖拽
    else if ([gesture isKindOfClass:[UIPanGestureRecognizer class]]) {
        _gestureDisplay.text = @"拖拽手势";
        UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gesture;
        static CGPoint startCenter;
        if (pan.state == UIGestureRecognizerStateBegan) {
            startCenter = _gestureView.center;
        }
        else if (pan.state == UIGestureRecognizerStateChanged) {
        // 此处必须从self.view中获取translation,因为translation和view的transform属性挂钩,若transform改变了则translation也会变
            CGPoint translation = [pan translationInView:self.view];
            _gestureView.center = CGPointMake(startCenter.x + translation.x, startCenter.y + translation.y);
        }
        else if (pan.state == UIGestureRecognizerStateEnded) {
            startCenter = CGPointZero;
        }
    }
    // 缩放
    else if ([gesture isKindOfClass:[UIPinchGestureRecognizer class]]) {
        _gestureDisplay.text = @"缩放手势";
        UIPinchGestureRecognizer *pinch = (UIPinchGestureRecognizer *)gesture;
        static CGFloat startScale;
        if (pinch.state == UIGestureRecognizerStateBegan) {
            startScale = pinch.scale;
        }
        else if (pinch.state == UIGestureRecognizerStateChanged) {
            CGFloat scale = (pinch.scale - startScale)/2 +1;
            NSLog(@"%f",scale);
            _gestureView.transform = CGAffineTransformScale(_gestureView.transform, scale, scale);
            startScale = pinch.scale;
        }
        else if (pinch.state == UIGestureRecognizerStateEnded) {
            startScale = 1;
        }
    }
    // 旋转
    else if ([gesture isKindOfClass:[UIRotationGestureRecognizer class]]) {
        _gestureDisplay.text = @"旋转手势";
        UIRotationGestureRecognizer *rotate = (UIRotationGestureRecognizer *)gesture;
        static CGFloat startRotation;
        if (rotate.state == UIGestureRecognizerStateBegan) {
            startRotation = rotate.rotation;
        }
        else if (rotate.state == UIGestureRecognizerStateChanged) {
            CGFloat rotation = (rotate.rotation - startRotation) / 2;
            _gestureView.transform = CGAffineTransformRotate(_gestureView.transform, rotation);
            startRotation = rotate.rotation;
        }
        else if (rotate.state == UIGestureRecognizerStateEnded) {
            startRotation = 0;
        }
    }
    // 长按
    else if ([gesture isKindOfClass:[UILongPressGestureRecognizer class]] &&
             gesture.state == UIGestureRecognizerStateBegan) {
        _gestureDisplay.text = @"长按手势";
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"长按手势"
                                                        message:nil
                                                       delegate:nil
                                              cancelButtonTitle:@"确定"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
}

- (void)positionAnimationWithDirection:(UISwipeGestureRecognizerDirection)direction {

    CGPoint center = direction == UISwipeGestureRecognizerDirectionLeft ?
                                  CGPointMake(CGRectGetMinX(self.view.bounds) + CGRectGetMidX(_gestureView.bounds),
                                              CGRectGetMidY(_gestureView.frame)) :
                                  CGPointMake(CGRectGetMaxX(self.view.bounds) - CGRectGetMidX(_gestureView.bounds),
                                              CGRectGetMidY(_gestureView.frame));
    [UIView animateWithDuration:1.0 animations:^{
        _gestureView.center = center;
    }];
}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值