UIGestureRecognizer学习之UILongPressGestureRecognizer(长按)
2016-06-06 17:40
513 查看
属性
UILongPressGestureRecognizer是UIGestureRecognizer的子类。UILongPressGestureRecognizer除了继承UIGestureRecognizer的属性外,还提供如下两个属性:
maximumNumberOfTouches: //设置该拖动手势处理器最多支持几个手指拖动。 minimumPressDuration: //指定用户至少在屏幕上按下多少秒才会触发该长按手势。该默认值为0.5
获取拖动
除此之外,该手势处理器还提供了如下方法获取拖动的相关信息。- translationInView: //获取该拖动手势在指定控件上的位移。该方法返回一个CGPoint结构体数据,该结构体中x变量的值代表了水平方向的位移,y变量的值代表了垂直方向的位移。 - velocityInView: //获取该拖动手势在指定控件上的拖动速度。该方法返回一个CGPoint结构体数据,该结构体中x变量的值代表了水平方向的速度,y变量的值代表了垂直方向的速度。
例子
示例:长按添加按钮#define MARGINE 20 #define BUTTON_WIDTH 80 #define BUTTON_HEIGHT 30 #define CELL_WIDTH 100 #define CELL_HEIGHT 40 @implementation FKViewController NSInteger bnIndex; NSMutableArray* bnArray; - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor lightGrayColor]; // 创建一个NSMutableArray集合,用于保存多个按钮 bnArray = [[NSMutableArray alloc] init]; // 创建一个手势处理器,用于检测、处理长按手势 UILongPressGestureRecognizer* gesture = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)]; // 为该控件添加手势处理器 [self.view addGestureRecognizer:gesture]; } - (void) longPress:(UILongPressGestureRecognizer*)gesture { // 创建一个按钮 UIButton* bn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // 获取NSArray中已经包含了几个按钮 NSInteger count = bnArray.count; // 计算当前添加的按钮位于第几行、第几列 NSInteger row = count / 3; NSInteger col = count % 3; // 为该按钮设置文本 [bn setTitle:[NSString stringWithFormat:@"按钮%d", bnIndex] forState:UIControlStateNormal]; // 设置该bn按钮的大小和位置 bn.frame = CGRectMake(MARGINE + col * CELL_WIDTH , row * CELL_HEIGHT + MARGINE , BUTTON_WIDTH , BUTTON_HEIGHT); // 为该按钮添加事件处理方法 [bn addTarget:self action:@selector(remove:) forControlEvents:UIControlEventTouchUpInside]; [bnArray addObject:bn]; // 将按钮添加到应用界面的UIView控件中 [self.view addSubview:bn]; bnIndex ++; } - (void) remove:(id)sender { // 删除事件源控件(激发该事件的按钮) [sender removeFromSuperview]; // 将触发该事件的按钮从NSMutableArray集合中删除 [bnArray removeObject:sender]; [self rearrange]; } - (void) rearrange { // 重新计算每个按钮的大小和位置 for(int i = 0 ; i < bnArray.count; i ++) { NSInteger row = i / 3; NSInteger col = i % 3; UIButton* bn = [bnArray objectAtIndex:i]; bn.frame = CGRectMake(MARGINE + col * CELL_WIDTH , row * CELL_HEIGHT + MARGINE , BUTTON_WIDTH , BUTTON_HEIGHT); } } @end
按钮绑定的事件为:当用户单击该按钮时,系统删除该按钮本身。
UIGestureRecognizer合集:
UIGestureRecognizer
UITapGestureRecognizer
UIPinchGestureRecognizer
UIRotationGestureRecognizer
UISwipeGestureRecognizer
UIPanGestureRecognizer
UILongPressGestureRecognizer
相关文章推荐
- Hbuilder开发移动新闻客户端(一)
- Android--利用相机或相册截取用户头像(解决了miui无法截取,以及部分机型拍照无返回Uri)【上】
- ABAP 7.4新特性(三): VALUE 操作符
- 苹果内部支付
- 关于Toolbar的折腾(结合Fragment使用)
- ios界面开发之UIControl事件
- Must specify unique android:id, android:tag, or have a parent with an id for XXX
- Easyui Datagrid相同连续列合Demo(二)
- Auto Layout的初步运用。
- Hbuilder开发移动新闻客户端(二)
- uevent分析(和设备驱动有关)
- Request.GetOwinContext()打不到
- requirejs集成微信公众号支付无反应
- iOS学习应用开发就业课_009:UIViewController的使用
- CAShapeLayer + UIBezierPath = sectionView
- Ansible UI web 界面搭建 ----欢迎大家一起讨论研究
- UIGestureRecognizer学习之UIPanGestureRecognizer(拖动)
- Fragment的生命周期
- oc 多线程UI更新
- BlockingQueue 阻塞队列,很有用的一种