手势 - 单击、长按、拖动等

@implementation ViewController

UILabel *labelView;

int startX;

int startY;

- (void)viewDidLoad {

[super viewDidLoad];

startX = 100;

startY = 100;

labelView = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 50)];

labelView.backgroundColor = [UIColor redColor];

labelView.text = @"click text";

labelView.textColor = [UIColor whiteColor];

labelView.font = [UIFont systemFontOfSize:15];

labelView.contentMode = UIViewContentModeCenter;

labelView.textAlignment = kCTTextAlignmentCenter;

labelView.userInteractionEnabled = YES;

// 单击

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(singleClick:)];

[labelView addGestureRecognizer:tapGesture];

// 滑动事件

UISwipeGestureRecognizer *swapGesture = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGestureHandle:)];

[self.view addGestureRecognizer:swapGesture];

// 拖动

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGestureRecognizer:)];

[labelView addGestureRecognizer:panGesture];

// 长按

UILongPressGestureRecognizer *longPressGuesture = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];

[labelView addGestureRecognizer:longPressGuesture];

[self.view addSubview:labelView];

}

-(void)singleClick:(UITapGestureRecognizer *)gesture

{

NSLog(@"CLICK");

}

-(void)longPress:(UILongPressGestureRecognizer *)gesture

{

NSLog(@"LONG CLICK");

}

-(void)swipeGestureHandle:(UISwipeGestureRecognizer *)gesture

{

NSInteger direction = gesture.direction;

NSLog(@"direction is: %i", direction);

switch (direction) {

case UISwipeGestureRecognizerDirectionRight:

NSLog(@"TO LEFT");

CGRect frame = CGRectMake(100, 100, labelView.frame.size.width, labelView.frame.size.height);

labelView.frame = frame;            break;

case UISwipeGestureRecognizerDirectionLeft:

NSLog(@"TO RIGHT");

break;

default:

break;

}

}

-(void)panGestureRecognizer:(UIPanGestureRecognizer *)gesture

{

// 位移

CGPoint point = [gesture translationInView:labelView];

NSLog(@"point : x = %g, y=%g",point.x, point.y);

CGRect frame = CGRectMake(startX + point.x, startY + point.y, labelView.frame.size.width, labelView.frame.size.height);

labelView.frame = frame;

NSLog(@"gusture is : %i", gesture.state);

if(gesture.state == UIGestureRecognizerStateEnded)

{

startX = labelView.frame.origin.x;

startY = labelView.frame.origin.y;

}

}

时间: 2024-08-29 06:45:25

手势 - 单击、长按、拖动等的相关文章

手势操作(单击手势,长按手势,策划手势)

1.策划手势操作 // // ViewController.m // 1-28策划手势 // // Created by ma c on 16/1/28. // Copyright © 2016年 bjsxt. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (strong, nonatomic) UISwipeGestureRecognizer *rec

Android实现GridView的item长按拖动删除实现(带动画效果)

领导这几天让做一个项目,就是可以实现像支付宝首页一样的可以长按拖动,删除的界面,以前没做过,领导让我做的时候觉得简直是老虎吃天,无从下手啊,可是领导的任务还是要实现的,没办法,就自己网上找咯,但是网上的demo五花八门无法满足我的需求,而且bug还很多,所以最后就自己实现了,说实话,这个效果困扰了我好几个星期,因为其中牵扯的知识点太多了,什么事件分发机制,动画效果,互换位置的算法,还有拖动,这些我都没有接触过,所以只有一点一点来做咯,如果大家还没有了解过这些知识点,我建议搭建先去了解一下,毕竟这

让UITableView支持长按拖动排序

来自Leo的原创博客,转载请著名出处 我的StackOverflow 我的Github https://github.com/LeoMobileDeveloper 注意:本文的代码是用Swift 2.3写的 效果 项目地址 DraggableTableView 所有Cell都可以拖拽. 固定第一个Cell 限制长按区域 实现原理 对UITableView添加LongPress手势 在longPress的时候,对选中的Cell进行截图,添加到TableView作为subView,并且隐藏当前的选中

iOS如何实现长按拖动控件

实现控件拖动的方法有多种,可以使用UICollectionView的代理方法直接实现,但是有些开发者在初始时没有使用UICollectionView创建九宫格,后来增加需求,却要增加这种拖动移动的效果,又不想更改页面的初始控件,那么应该怎么实现呢? 方法很简单,首先在@interface创建以下全局变量: @interface YRViewController () { BOOL contain; CGPoint startPoint; CGPoint originPoint; } @prope

android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理

本示例说明: 1.自定义listview条目样式,自定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,并且操作后listview自动刷新. 3.响应用户操作点击事件,示例中展示单击时取出主键Id和其他内容. 4.响应用户操作长按事件,示例中展示长按时根据主键Id来编辑和删除数据. 5.表现层与数据处理层分开,不依赖于cursor(使用cursor不易表现和业务分离),支持接口编程. 6.使用数据库处理框架AHibernate灵活操作sqlite数据库,详见:

android listview综合使用演示样例_结合数据库操作和listitem单击长按等事件处理

本演示样例说明: 1.自己定义listview条目样式,自己定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,而且操作后listview自己主动刷新. 3.响应用户操作点击事件,演示样例中展示单击时取出主键Id和其它内容. 4.响应用户操作长按事件,演示样例中展示长按时依据主键Id来编辑和删除数据. 5.表现层与数据处理层分开,不依赖于cursor(使用cursor不易表现和业务分离),支持接口编程. 6.使用数据库处理框架AHibernate灵活操作sql

JS =>处理单击事件与拖动事件并存

使用click事件,很难确定在拖动开始和结束的时候触发,所以使用了onmouseup(释放鼠标的时候),释放鼠标的时候,即在拖动还未结束,但是准备处理的阶段,此时mouseButtonFlag按照逻辑来说应该是true,即不会触发绑定的事件. 1.将click转为使用onmouseup事件 2.添加mouseButtonFlag对象,判断是否拖拽情况,用以处理是否触发鼠标释放(点击)事件 (这个是篇sortable的参数说明的文章,作者xpsharp,http://blog.csdn.net/x

android-ImageView的拖动、旋转、缩放、边界回弹、双击缩放、单击销毁及源码下载

博客地址:http://blog.csdn.net/u010156024 TouchImageViewActivity 是本人一句一句代码写的,参考了网上大牛的博客. 不过其中的效果是网上没有的,也是本人一直想实现的效果. * 本实例重写ImageView的触摸事件和手势方法. * 实现图片的缩放.拖动,双击放大缩小.单击销毁,边界回弹,旋转并实现自动摆正. * 详细效果请看目录下面的:结果展示动态图.gif * 其中大部分关键节点都给出了注释,相信大家一看就会很快明白的. 本示例所展示的效果,

Android长按及拖动事件探究

Android中长按拖动还是比较常见的.比如Launcher中的图标拖动及屏幕切换,ListView中item顺序的改变,新闻类App中新闻类别的顺序改变等.下面就这个事件做一下分析. 就目前而言,Android中实现长按事件响应有几种方式,包括: 设置View.OnLongClickListener监听器 通过GestureDetector.OnGestureListener间接获取长按事件 实现View.OnTouchListener,然后在回调中通过MotionEvent判断是否触发了长按