6.18 Touch 手势

来源:互联网 发布:指甲油品牌知乎 编辑:程序博客网 时间:2024/06/07 23:44

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
原创粉丝点击