iOS--手势UIGestureRecognizer
来源:互联网 发布:edi电子数据交换 编辑:程序博客网 时间:2024/05/13 02:26
- UITapGestureRecognizer 点击
- UIPinchGestureRecognizer 捏合
- UIRotationGestureRecognizer 旋转
- UISwipeGestureRecognizer 清扫(滑动)
- UIPanGestureRecognizer 拖拽
- UILongPressGestureRecognizer 长按
#pragma mark -
#pragma mark 创建视图(来选择进行那一个手势)
- (void)createSubViews
{
//创建一个imageView来显示一张图片
self.imageView = [[UIImageViewalloc] initWithFrame:CGRectMake(50,50, 260, 300)];
[self.imageViewsetImage:[UIImageimageNamed:@"1.png"]];
self.imageView.userInteractionEnabled =YES;
[self.viewaddSubview:self.imageView];
[self.imageViewrelease];
// 点击,长按,清扫,捏合,旋转,拖拽
NSMutableArray *arr = [NSMutableArrayarrayWithObjects:@"点击",@"长按",@"清扫",@"捏合",@"旋转",@"拖拽",nil];
//创建一个UISegmentedControl控制器
UISegmentedControl *seg = [[UISegmentedControlalloc] initWithItems:arr];
//添加点击事件时,注意触发事件的状态
[seg addTarget:selfaction:@selector(segAction:)forControlEvents:UIControlEventValueChanged];
seg.frame = CGRectMake(20,400, 270, 30);
[self.viewaddSubview:seg];
[seg release];
}
- (void)segAction:(id)sender
{
UISegmentedControl *seg = (UISegmentedControl *)sender;
//为了防止一个view上有多个手势而无法确定是哪一个手势
//每次触发事件时,移除imageView的所有手势,重新添加新的手势
// 1.获得一个视图的所有手势
NSArray *gesture = self.imageView.gestureRecognizers;
// 2. 移除
for (UIGestureRecognizer *gesin gesture) {
[self.imageViewremoveGestureRecognizer:ges];
}
//根据选择的下标进行不同的操作,创建不同手势,触发不同手势的方法
switch (seg.selectedSegmentIndex) {
case 0:
{
// 创建点击手势
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(tapAction:)];
// 添加手势
[self.imageViewaddGestureRecognizer:tapGesture];
[tapGesturerelease];
}
break;
case 1:
{
// 创建长按手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longPressAction:)];
[self.imageViewaddGestureRecognizer:longPress];
[longPressrelease];
}
break;
case 2:
{
// 创建清扫(滑动)手势
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizeralloc] initWithTarget:selfaction:@selector(swipeAction:)];
// 清扫手势只能有一个方向
swipe.direction =UISwipeGestureRecognizerDirectionDown;
[self.imageViewaddGestureRecognizer:swipe];
[swiperelease];
}
break;
case 3:
{
// 创建捏合手势
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizeralloc] initWithTarget:selfaction:@selector(pinchAction:)];
[self.imageViewaddGestureRecognizer:pinch];
[pinchrelease];
}
break;
case 4:
{
// 创建旋转手势
UIRotationGestureRecognizer *rotate = [[UIRotationGestureRecognizeralloc] initWithTarget:selfaction:@selector(rotateAction:)];
[self.imageViewaddGestureRecognizer:rotate];
[rotaterelease];
}
break;
case 5:
{
// 创建拖拽手势
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizeralloc] initWithTarget:selfaction:@selector(panAction:)];
[self.imageViewaddGestureRecognizer:pan];
[panrelease];
}
break;
default:
break;
}
}
#pragma mark -
#pragma mark 点击手势事件
- (void)tapAction:(UITapGestureRecognizer *)tap
{
NSLog(@"%s", __func__);
//通过手势获得手势所在的视图
// UIImageView *aImage = (UIImageView *)tap.view;
// state是个枚举,根据手势不同状态操作不同的事情
if (tap.state ==UIGestureRecognizerStateBegan) {
NSLog(@"开始点击");
}
}
#pragma mark -
#pragma mark 旋转的手势事件
- (void)rotateAction:(UIRotationGestureRecognizer *)rotate
{
// 控制是否可以旋转的 rotation是角度的意思
// CGAffineTransformRotate C语言的函数 (角度基于视图最开始的位置,所以角度会越来越大)
self.imageView.transform =CGAffineTransformRotate(self.imageView.transform, rotate.rotation);
//每次基于自身现在位置进行旋转 故角度为 0
rotate.rotation =0;
NSLog(@"rotation = %f", rotate.rotation);
}
#pragma mark -
#pragma mark 长按的手势事件
- (void)longPressAction:(UILongPressGestureRecognizer *)press
{
if (press.state ==UIGestureRecognizerStateBegan) {
NSLog(@"开始");
}elseif (press.state ==UIGestureRecognizerStateEnded){
NSLog(@"结束");
}
}
#pragma mark -
#pragma mark 清扫的手势事件
- (void)swipeAction:(UISwipeGestureRecognizer *)swipe
{
NSLog(@"shao");
}
#pragma mark -
#pragma mark 捏合的手势事件
- (void)pinchAction:(UIPinchGestureRecognizer *)pinch
{
// 后面俩个参数,是指放大比例,一般是等比例放大,即pinch.scale
self.imageView.transform =CGAffineTransformScale(self.imageView.transform, pinch.scale, pinch.scale);
// 每次对比例置 1
pinch.scale =1;
NSLog(@"%g", pinch.velocity);
}
#pragma mark -
#pragma mark 拖拽的手势事件
- (void)panAction:(UIPanGestureRecognizer *)pan
{
//获得当前视图的偏移量
CGPoint point = [pan translationInView:self.imageView];
self.imageView.transform =CGAffineTransformTranslate(self.imageView.transform, point.x, point.y);
[pan setTranslation:CGPointMake(0,0) inView:self.imageView];
}
效果图:
总结:
在view上添加tap(点击)手势,可相当于button的点击事件,同样的使用tap(点击)手势也可以写一个关灯游戏或者打地鼠.而这6个手势主要用于图像的操作,可以根据图片上不同的手势触发不同的方法来进行不同的操作.
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- ios 手势识别UIGestureRecognizer
- iOS手势UIGestureRecognizer
- iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- iOS手势UIGestureRecognizer
- Linux 查看脚本的执行过程
- php中heredoc的使用方法
- C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别
- EPSON 机器人多任务下的互锁处理
- CodeForces 200B Drinks
- iOS--手势UIGestureRecognizer
- 提升Android ListView性能的几个技巧
- [C#] ServiceStack.Redis如何批量的pop数据?
- 跨域请求之jQuery的ajax jsonp的使用解惑
- NO.5 ios--ui code review 实现单击一次view随机改变一个颜色
- 多边形重心问题
- leetcode Reverse digits of an integer
- ios多线程
- CodeForces 70A Cookies