zoukankan      html  css  js  c++  java
  • UIGestureRecognizer 手势

    - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
    
    _imageView = [[UIImageView alloc]initWithFrame:CGRectMake((self.view.frame.size.width-150)/2, (self.view.frame.size.height-150)/2, 150, 150)];
    _imageView.userInteractionEnabled = YES;//交互使能,允许界面交互
    _imageView.image = [UIImage imageNamed:@"cat.png"];
    [self.view addSubview:_imageView];
    
    // 单击的 TapRecognizer
    UITapGestureRecognizer *singleTap;
    singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(SingleTap:)];
    singleTap.numberOfTapsRequired = 1; //点击的次数 =1 单击
    
    [_imageView addGestureRecognizer:singleTap];//给对象添加一个手势监测;
    
    // 双击的 TapRecognizer
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(DoubleTap:)];
    doubleTap.numberOfTapsRequired = 2; //点击的次数 =2 双击
    [_imageView addGestureRecognizer:doubleTap];//给对象添加一个手势监测;
    
    /*
    1.双击手势确定监测失败才会触发单击手势的相应操作,否则双击时第一击时会响应单击事件
    2.会造成单击时要判断是否是双击,调用单击会有所延时。属正常现象。
    */
    [singleTap requireGestureRecognizerToFail:doubleTap];
    
    //捏合缩放手势 Pinch
    UIPinchGestureRecognizer *pinch;
    pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinch:)];
    // [_imageView addGestureRecognizer:pinch];//添加到_imageView的时候,是要把手指放到_imageView操作
    [self.view addGestureRecognizer:pinch];//是self的时候,操作整个view都可以捏合_imageView(在响应事件中操作)
    pinch.delegate = self;
    
    
    //旋转手势 Rotation
    UIRotationGestureRecognizer *rotateRecognizer = [[UIRotationGestureRecognizer alloc]
    initWithTarget:self
    action:@selector(handleRotate:)];
    [self.view addGestureRecognizer:rotateRecognizer];//是self的时候,操作整个view都可以捏合_imageView(在响应事件中操作)
    rotateRecognizer.delegate = self;
    
    
    //滑动手势 SwipeRecognizer
    UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc]
    initWithTarget:self
    action:@selector(handleSwipe:)];
    [self.view addGestureRecognizer:swipeRecognizer];//是self的时候,操作整个view都可以捏合_imageView(在响应事件中操作)
    swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;//操作为左滑
    swipeRecognizer.delegate = self;
    
    
    //拖动手势 PanRecognizer
    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc]
    initWithTarget:self
    action:@selector(handlePan:)];
    [_imageView addGestureRecognizer:panRecognizer];//关键语句,添加一个手势监测;
    panRecognizer.maximumNumberOfTouches = 1;
    panRecognizer.delegate = self;
    
    //长按手势 LongPressRecognizer
    UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc]
    initWithTarget:self
    action:@selector(handlelongPress:)];
    [_imageView addGestureRecognizer:longPressRecognizer];
    longPressRecognizer.minimumPressDuration = 1.0f;//触发长按事件时间为:1.0秒
    longPressRecognizer.delegate = self;
    
    }
    
    -(void)SingleTap:(UITapGestureRecognizer*)recognizer
    {
    //处理单击操作
    NSLog(@"单击操作");
    }
    
    -(void)DoubleTap:(UITapGestureRecognizer*)recognizer
    {
    //处理双击操作
    NSLog(@"双击操作");
    }
    
    - (void)handlePinch:(UIPinchGestureRecognizer*)recognizer
    {
    NSLog(@"缩放操作");//处理缩放操作
    //对imageview缩放
    _imageView.transform = CGAffineTransformScale(_imageView.transform, recognizer.scale, recognizer.scale);
    //对self.view缩放,因为recognizer是添加在self.view上的
    //recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    recognizer.scale = 1;
    }
    
    - (void)handleRotate:(UIRotationGestureRecognizer*) recognizer
    {
    NSLog(@"旋转操作");//处理旋转操作
    //对imageview旋转
    _imageView.transform = CGAffineTransformRotate(_imageView.transform, recognizer.rotation);
    //对self.view旋转,因为recognizer是添加在self.view上的
    // recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
    recognizer.rotation = 0;
    }
    
    - (void)handleSwipe:(UISwipeGestureRecognizer*) recognizer
    {
    //处理滑动操作
    if(recognizer.direction==UISwipeGestureRecognizerDirectionLeft) {
    NSLog(@"左滑滑动操作");
    }else if(recognizer.direction==UISwipeGestureRecognizerDirectionRight){
    NSLog(@"右滑滑动操作");
    }
    }
    
    -(void)handlePan:(UIPanGestureRecognizer*)recognizer
    {
    NSLog(@"拖动操作");
    //处理拖动操作,拖动是基于imageview,如果经过旋转,拖动方向也是相对imageview上下左右移动,而不是屏幕对上下左右
    CGPoint translation = [recognizer translationInView:_imageView];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
    recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointZero inView:_imageView];
    }
    
    -(void)handlelongPress:(UILongPressGestureRecognizer*)recognizer
    {
    //处理长按操作,开始结束都会调用,所以长按1次会执行2次
    if(recognizer.state == UIGestureRecognizerStateBegan){
    NSLog(@"开始长按操作");
    }else if(recognizer.state == UIGestureRecognizerStateEnded){
    NSLog(@"结束长按操作");
    }
    }
    
    - (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

     

  • 相关阅读:
    判断字符串是否为数字
    Javascript to validate HKID number
    ServiceNow 中Reference 的 dynamic creation script
    Dynamic CRM 中修改实体中主字段的长度
    字符串的压缩与解压
    JDBC中重要的类/接口-Connection、DriverManager、ResultSet、Statement及常用方法
    java读取指定package下的所有class
    mybatis由JDBC的演化过程分析
    Java类与对象初始化的过程(一道经典的面试题)
    StringBuffer和StringBuilder区别?
  • 原文地址:https://www.cnblogs.com/xujinzhong/p/11155078.html
Copyright © 2011-2022 走看看