您的位置:首页 > 产品设计 > UI/UE

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: