iOS手势操作简介(六)

利用UIGestureRecognizer来对手势进行处理:

@interface HMViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imagView;

@end

@implementation HMViewController

  • (void)viewDidLoad
    {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

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

    [_imagView addGestureRecognizer:pan];
    }

  • (void)pan:(UIPanGestureRecognizer *)pan
    {
    // 获取手指移动的位置
    CGPoint trans = [pan translationInView:_imagView];

    _imagView.transform = CGAffineTransformTranslate(_imagView.transform, trans.x, trans.y);

    // 复位
    [pan setTranslation:CGPointZero inView:_imagView];
    NSLog(@”%@”,NSStringFromCGPoint(trans));

}

warning pinch

  • (void)addPinch
    {
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
    // 设置代理的原因:想要同时支持多个手势
    pinch.delegate = self;
    [_imagView addGestureRecognizer:pinch];

}

  • (void)pinch:(UIPinchGestureRecognizer *)pinch
    {
    _imagView.transform = CGAffineTransformScale(_imagView.transform, pinch.scale, pinch.scale);

    // 复位
    pinch.scale = 1;
    }

// Simultaneous:同时
// 默认是不支持多个手势
// 当你使用一个手势的时候就会调用
- (BOOL)gestureRecognizer:(UIGestureRecognizer )gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer )otherGestureRecognizer
{
return YES;
}

warning rotation

  • (void)addRotation
    {
    // rotation
    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
    rotation.delegate = self;
    [_imagView addGestureRecognizer:rotation];
    }

  • (void)rotation:(UIRotationGestureRecognizer *)rotation
    {
    NSLog(@”%f”,rotation.rotation);
    // _imagView.transform = CGAffineTransformMakeRotation(rotation.rotation);
    _imagView.transform = CGAffineTransformRotate(_imagView.transform, rotation.rotation);

    // 复位
    rotation.rotation = 0;
    }

warning Swipe

  • (void)addSwipe
    {
    // Swipe
    // 一个手势只能识别一个方向
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
    swipe.direction = UISwipeGestureRecognizerDirectionRight;
    [_imagView addGestureRecognizer:swipe];
    }

  • (void)swipe:(UISwipeGestureRecognizer *)swipe
    {
    NSLog(@”swipe”);
    }

warning longPress

  • (void)addLongPress
    {
    // longPress
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];

    [_imagView addGestureRecognizer:longPress];
    }

  • (void)longPress:(UILongPressGestureRecognizer *)longPress
    {
    // 根据状态执行事件
    if (longPress.state == UIGestureRecognizerStateBegan) {

    NSLog(@"longPress");
    

    }
    }

warning tap

  • (void)addTap
    {
    // tap
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
    // 点按多少次才能触发手势
    // tap.numberOfTapsRequired = 2;
    //
    // // 必须多少个手指触摸才能触发手势
    // tap.numberOfTouchesRequired = 2;

    tap.delegate = self;

    [_imagView addGestureRecognizer:tap];
    }

// 这个触摸点能否触发手势
//- (BOOL)gestureRecognizer:(UIGestureRecognizer )gestureRecognizer shouldReceiveTouch:(UITouch )touch
//{
// CGPoint currentPoint = [touch locationInView:_imagView];
//
// if (currentPoint.x < _imagView.bounds.size.width * 0.5) {
// return NO;
// }else{
//
// return YES;
// }
//}

  • (void)tap:(UITapGestureRecognizer *)tap
    {
    NSLog(@”tap”);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS并行程序开发- GCD NSOperationQueue(1)

import UIKit let imageURLs [“http://www.planetware.com/photos-large/F/france-paris-eiffel-tower.jpg“, “http://adriatic-lines.com/wp-content/uploads/2015/04/canal-of-Venice.jpg“, “http://algoos.com/wp-content/uploads/2015/08/ireland-02.jpg“, “http:…

二次幂权限设计

设置含有的权限如增删改查减为1,2,4,8,16 如果A包含增删改这5个权限&#xff0c;那A的值为1247 如果B包含增改查这5个权限&#xff0c;那A的值为14813 如果C包含增删改查减这5个权限&#xff0c;那A的值为12481631 7二进制为111,13的二进制为1101,31二进制为11111 1二进制为1&a…

最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。

#基于webpack构建的 Koa2 restful API 服务器脚手架这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架&#xff0c;支持 ES6, 支持使用TypeScript编写。GIT地址&#xff1a;https://github.com/Allenzihan/koa2-mysql-framework.git此脚手架只安装了一些配合koa2使用的必要…

使用putty在linux主机和windows主机之间拷贝文件(已测试可执行)

转载于&#xff0c;请点击 首先下载putty&#xff0c;putty下载地址zip&#xff0c; 解压zip发现里面有plink.exe pscp.exe psftp.exe putty.exe puttygen.exe puttytel.exe等可执行文件&#xff0c;如果只是想要链接主机做一些操作那么使用putty.exe&#xff0c;要想要上传 …

博客园在升级的路上,不妨更自信些,同时说说我们可以为博客园做些什么

最近&#xff0c;博客园在技术升级上做了积极向上的努力&#xff0c;虽然中间过程出现反复&#xff0c;但姑且先不论最终升级后客户体验方面的提升&#xff0c;在升级过程中探索排查问题和解决问题的过程&#xff0c;本身就能帮助博客园团队和广大用户积累经验和提升能力&#…

iOS中持久化存储SQLite(一)

在iOS中做持久化存储有多种方案&#xff0c;其中包括plist, preference, sqlite, core data,其中&#xff1a; &#xff08;1&#xff09;plist, preference适合小型数据存储&#xff0c;因为每次存储前都必须将文件内容读到内存中&#xff0c;因此如果数据量过大就会占用大量…

多进程相关内容

多进程相关内容 multiprocessing模块与process类 multiprocessing python中的多线程无法利用多核优势&#xff0c;如果想要充分地使用多核CPU的资源&#xff08;os.cpu_count()查看&#xff09;&#xff0c;在python中大部分情况需要使用多进程。Python提供了multiprocessing。…

iOS中SQLite持久化存储第三方库FMDB

interface HMShopTool : NSObject (NSArray *)shops; (void)addShop:(HMShop *)shop; end implementation HMShopTool static FMDatabase *_db; (void)initialize { // 1.打开数据库 NSString *path [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, N…

python超神之路:python异常对照表

python异常对照表 异常名称描述BaseException所有异常的基类SystemExit解释器请求退出KeyboardInterrupt用户中断执行(通常是输入^C)Exception常规错误的基类StopIteration迭代器没有更多的值GeneratorExit生成器(generator)发生异常来通知退出StandardError所有的内建标准异常…

python超神之路:创建对象的9种方法

python生成对象的9种方法 class Point:def __init__(self,x,y):self.x xself.y y import sys import copy import typespoint1 Point(1,2) point2 eval("{}({},{})".format("Point",1,2)) point3 globals()[Point](1,2) point4 locals()["Point…

面向接口的编程

面向接口的编程&#xff0c;将接口与实现分离&#xff0c;可以极大的降低代码的耦合&#xff0c;比如在编程中使用的加密接口&#xff0c;如果将具体的加密算法写入到使用加密的地方&#xff0c;这样就会导致&#xff0c;下一次加密方法发生改变的时候会导致大量的地方需要修改…

ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)...

在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替换自带DI进行构造函数的批量依赖注入&#xff0c;本章将和大家继续分享如何使之能够同时支持属性的批量依赖注入。 约定&#xff1a; 1、仓储层接口都以“I”开头&#xff0c;以“Repository”结尾。仓储层实现都以…

可视化caffe模型结构及在线可视化

在线可视化caffe模型结构 http://ethereon.github.io/netscope/#/editor 假设Caffe的目录是$(CAFFE_ROOT) 1.编译caffe的python接口 $ make pycaffe 2.装各种依赖 $ pip install pydot $ sudo apt-get install graphviz 3.可视化模型 draw_net.py执行的时候带三个参数 …

布式缓存系统Memcached简介与实践

缘起: 在数据驱动的web开发中&#xff0c;经常要重复从数据库中取出相同的数据&#xff0c;这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。但是ASP.NET中的虽然已经可以实现对页面局部进行缓存&#xff0c;但还是不够灵活。此时Memcached或许是你想要的。Memca…

仿百度翻页(转)

https://www.cnblogs.com/fozero/p/9874334.html 转载于:https://www.cnblogs.com/hj0711/p/11390203.html

matlab 多核并行编程

在使用matlab处理大数据&#xff0c;编程需要注意两个问题&#xff1a;并行运算和释放内存。matlab也提供了并行计算的功能&#xff0c;甚至能用GPU加速。并行计算工具箱&#xff0c;叫做parallel computing toolbox.它的使用方法&#xff0c;可以从matlab的帮助获得。 Parall…

iOS核心动画之CALayer(1)

本文目录 一、什么是CALayer二、CALayer的简单使用 回到顶部一、什么是CALayer * 在iOS系统中&#xff0c;你能看得见摸得着的东西基本上都是UIView&#xff0c;比如一个按钮、一个文本标签、一个文本输入框、一个图标等等&#xff0c;这些都是UIView。 * 其实UIView之所以能显…

ASP.NET Core Web 应用程序系列(四)- ASP.NET Core 异步编程之async await

PS&#xff1a;异步编程的本质就是新开任务线程来处理。 约定&#xff1a;异步的方法名均以Async结尾。 实际上呢&#xff0c;异步编程就是通过Task.Run()来实现的。 了解线程的人都知道&#xff0c;新开一个线程来处理事务这个很常见&#xff0c;但是在以往是没办法接收线程里…

iOS核心动画之CALayer-layer的创建

本文目录 一、添加一个简单的图层二、添加一个显示图片的图层三、为什么CALayer中使用CGColorRef和CGImageRef这2种数据类型&#xff0c;而不用UIColor和UIImage&#xff1f;四、UIView和CALayer的选择五、UIView和CALayer的其他关系 * 上一讲已经说过&#xff0c;UIView内部默…

iOS核心动画之CALayer-隐式动画

本文目录 一、隐式动画属性二、position和anchorPoint 回到顶部一、隐式动画属性 * 在前面几讲中已经提到&#xff0c;每一个UIView内部都默认关联着一个CALayer&#xff0c;我们可用称这个Layer为Root Layer&#xff08;根层&#xff09;。所有的非Root Layer&#xff0c;也就…