热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

手势,手势应用小程序

 第一,   手势是指从用一个或多个手指接触屏幕开始,直到手指离开屏幕为止的所有事件。   注意:   在iPhone中最多同时可以支持5点触摸,iPad中最多同时可以支持11点触

 第一,

     手势是指从用一个或多个手指接触屏幕开始,直到手指离开屏幕为止的所有事件。

     注意:

     在iPhone中最多同时可以支持5点触摸,iPad中最多同时可以支持11点触摸。模拟器中按下option键,可以模拟两点触摸。

第二,

     手势识别器:UIGestureRecognizer

     关系:UIGestureRecognizer是在Touch的基础上封装出来的;

     UIGestureRecognizer的子类:

     UITapGestureRecognizer;//轻拍识别器

     UILongPressGestureRecognizer;//长按识别器

     UISwipGestureRecognizer;//轻扫识别器

     UIRotationGestureRecognizer;//旋转识别器

     UIPinchGestureRecognizer;//捏合识别器

     UIPanGestureRecognizer;//拖动识别器

 

下面是手势识别器的简单应用

 在我们创建的根视图文件中:

  RootViewController.m文件中

  -(void)viewDidLoad

[super viewDidLoad];
    imageNumber =1;
    // Do any additional setup after loading the view from its nib.
    
    NSArray *titles = @[@"轻拍",@"长按",@"轻扫",@"旋转",@"捏合",@"拖拽"];
    //定义选择控件
    UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:titles];
    segment.frame = CGRectMake(0, 460-30, 320, 30);
                                                                    //根据值的变化控制不同的事件
    [segment addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:segment];
    
    //生成图片视图
    //全局变量
    imageView = [[UIImageView alloc]initWithFrame:CGRectMake(50,80 , 220,280)];
    imageView.image = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"h1" ofType:@"jpeg"]];
    imageView.userInteractionEnabled = YES;//允许用户交互
    [self.view addSubview:imageView];
    
    
    //设置动画
    //滑动控件
    UISlider *slider = [[UISlider alloc]initWithFrame:CGRectMake(50, 30, 220, 10)];
    slider.maximumValue = 7;//设置最大值
    slider.minimumValue = 0.5;//设置最小值
    [slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:slider];
    
    //定义按钮
    NSArray *titleArr = [[NSArray alloc]initWithObjects:@"动画开始",@"动画结束", nil];
    for (int i=0; i<[titleArr count]; i++) {
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        btn.frame = CGRectMake(30+130*i, 380, 120, 30);
        [btn setTag:101+i];
        [btn setTitle:[titleArr objectAtIndex:i] forState:UIControlStateNormal];
        [btn addTarget:self action:@selector(startAction:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:btn];
    }

//选择事件关联方法

 -(void)segmentAction:(id)sender

UISegmentedControl *segmentedCOntrol= (UISegmentedControl*)sender;//拿到segment的每个控件
    //移除上一次手势  保证只有一个手势在视图上  UIGestureRecognizer手势识别器的父类
    for (UIGestureRecognizer*recognizer in imageView.gestureRecognizers) {
        [imageView removeGestureRecognizer:recognizer];
    }
    
    switch (segmentedControl.selectedSegmentIndex) {
        case 0:
        {
            NSLog(@"点击轻拍");
            //定义轻怕手势类
            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
            
           // tap.numberOfTapsRequired = 1;//得到轻拍次数
            [imageView addGestureRecognizer:tap];
            
        }
            break;
        case 1:
        {
            NSLog(@"点击长按");
            //定义长按手势类
            UILongPressGestureRecognizer *lOngPress= [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressAction:)];
            [imageView addGestureRecognizer:longPress];
        }
            break;
        case 2:
        {
            NSLog(@"点击轻扫");
            //定义轻扫手势类
            UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction:)];
           // swipe.direction = UISwipeGestureRecognizerDirectionLeft|UISwipeGestureRecognizerDirectionRight;
            [imageView addGestureRecognizer:swipe];
            
        }
            break;
        case 3:
        {
            NSLog(@"点击旋转");
            //定义旋转手势类
            UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationAction:)];
            [imageView addGestureRecognizer:rotation];
            
        }
            break;
        case 4:
        {
            NSLog(@"点击捏合");
            UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchAction:)];
            [imageView addGestureRecognizer:pinch];
        }
            break;
        case 5:
        {
            NSLog(@"点击拖拽");
            UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
            [imageView addGestureRecognizer:pan];
        }
            break;
        default:
            break;
    }

//轻拍方法

-(void)tapAction:(id)sender

NSLog(@"轻拍成功");
    imageNumber=arc4random()%7+1;//获取随机数1-8
    imageView.image = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"h%d",imageNumber] ofType:@"jpeg"]];//生成8个随机图片

//长按方法

-(void)longPressAction:(id)sender

NSLog(@"长按方法");
    if (imageNumber>6) {
        imageNumber = -1;
    }
   // NSLog(@"%d",imageNumber);
    imageNumber +=2;
    imageView.image = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"h%d",imageNumber] ofType:@"jpeg"]];

//定义轻扫方法

-(void)swipeAction:(id)sender

UISwipeGestureRecognizer *swipe = (UISwipeGestureRecognizer*)sender;
  if (swipe.direction == UISwipeGestureRecognizerDirectionRight)
      {
        if (imageNumber>1) {
             imageNumber-=1;//向右滑-1
        }else if (imageNumber ==0)
        {
            imageNumber =1;
        }
        else if (imageNumber ==1)
        {
            imageNumber =8;
        }
       
    }
    imageView.image = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"h%d",imageNumber] ofType:@"jpeg"]];

//定义旋转方法

-(void)rotationAction:(id)sender

NSLog(@"旋转");
    UIRotationGestureRecognizer *rotation = (UIRotationGestureRecognizer*)sender;
    imageView.transform = CGAffineTransformMakeRotation(rotation.rotation);

//定义捏合方法

-(void)pinchAction:(id)sender

UIPinchGestureRecognizer *pinch = (UIPinchGestureRecognizer*)sender;
    imageView.transform = CGAffineTransformMakeScale(pinch.scale, pinch.scale);

//定义拖拽方法

-(void)panAction:(id)sender

 UIPanGestureRecognizer *pan = (UIPanGestureRecognizer*)sender;
    NSLog(@"拖拽");
    //判断 一次 相当于touchBegin
    if (pan.state == UIGestureRecognizerStateBegan) {
         startPoint = [pan locationInView:self.view];//得到第一状态的点
    }
    CGPoint newPoint = [pan locationInView:self.view];//得到现在状态的点
    CGFloat cOntextOffX= newPoint.x - startPoint.x;//得到移动后的x 偏移量
    CGFloat cOntextOffY= newPoint.y - startPoint.y;//得到移动后的y 偏移量
    imageView.center = CGPointMake(imageView.center.x+contextOffX, imageView.center.y+contextOffY);
    startPoint = newPoint;

//动画方法

-(void)startAction:(id)sender

 

 UIButton *btn = (UIButton*)sender;
    if (btn.tag ==101) {
        NSLog(@"动画开始");
        NSMutableArray *imageArr = [[NSMutableArray alloc]init];
        for (int i=1; i<7; i++) {
            UIImage *currentImage = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"run%d",i] ofType:@"tiff"]];
            [imageArr addObject:currentImage];
        }
        imageView.animationImages = (NSArray*)imageArr;
        [imageView startAnimating];
    }else if (btn.tag ==102)
    {
        NSLog(@"动画结束");
        [imageView stopAnimating];
    }
-(void)sliderAction:(id)sender
{
    UISlider *slider = (UISlider*)sender;
    NSLog(@"%f",slider.value);
    if (imageView.isAnimating) {
       imageView.animationDuration = slider.value;
        [imageView startAnimating];
    }
   
}

 结果:

      手势,手势应用小程序

 

 

         

 

 


推荐阅读
  • phpcms v9无法连接数据库怎么办
    CMS教程|PHPCMSphpcmsCMS教程-PHPCMSqq骂人源码,vscode搜索不到中文插件,ubuntu输入法下载,f14tomcat,sqliteknex,网页设计图 ... [详细]
  • 微信小程序中如何获取当前位置经纬度以及地图显示
    小编给大家分享一下微信小程序中如何获取当前位置经纬度以及地图显示,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅 ... [详细]
  • PyQt 如何创建自定义QWidget
    这篇文章主要介绍了PyQt如何创建自定义QWidget,帮助大家更好的理解和学习使用pyqt,感 ... [详细]
  • selenium 定位方式3css_selector
    关于页面元素定位,可以根据id、class、name属性以及link_text。其中id属性是最理想的定位方式,class与name属性, ... [详细]
  • 根据时间更改网站背景的脚本。热!
    我在网上找到了它,并以自己的方式对其进行了自定义;作者的功劳就在那里。实际上,这是一个用于更改背景颜色的脚本,并且在我看来& ... [详细]
  • 1.方法一:采用OleDB读取EXCEL文件:把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:publicDa ... [详细]
  • 一个不错的JDBC连接池教程(带具体例子)
    1.前言数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游 ... [详细]
  • Electron中使用globalShortcut模块来注册全局快捷键,以实现类似于微信和QQ按快捷键调用剪切窗口的功能。快捷键在应用程序加载完成后进行注册 ... [详细]
  • 这篇文章主要介绍“CSS浮动和定位属性介绍”,在日常操作中,相信很多人在CSS浮动和定位属性介绍问题上存在疑惑,小编查阅了各式资料,整理出简单 ... [详细]
  • 看完这篇还搞不懂HTTPS,就来找我!
    本文将为大家详细梳理一下H ... [详细]
  • 1、获取类身上的成员变量--class_copyIvarListif([badgeViewChildisKindOfClass:NSClassFromString(_UIBadg ... [详细]
  • 微信小程序发布引起轰动
    首页资讯人物态度新闻段子知识产品公司活动专题黑镜物是No!登录为什么微信深夜发布的“小程序”引动了开发者的大地震?盛威12小时前新闻传说中的微信“应用号”终于要来了& ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
author-avatar
张浩杰_Hh
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有