手势。。。

UITouch

1.UITouch *touch = [touches anyObject];//找到触摸事件

if([touch.view isKindOfClass:[UIImageView class]]){

CGPoint point = [touch locationInView:self.view];//找到点击事件在self.view里的坐标

CGFloat xMove = point.x - _recordPoint.x;

CGFloat yMove = point.y - _recordPoint.y;//计算运动轨迹

touch.view.center = CGPointMake(touch.view.center.x +xMove,touch.view.center.y + yMove);//根据运动轨迹移动到点击到的视图

_recordPoint = [touch locationInView:self.view];//每次移动以后都修改记录

2.根据点击的次数来监听

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

UITouch *touch = [touches anyObject];
    
                NSLog(@"====%ld",touch.tapCount);
               //连续点击的次数
    
                 if ([touch.view isKindOfClass:[UIImageView class]]) {
                if (touch.tapCount == 2) {
            CGRect rect = touch.view.frame;
            rect.origin.x -= 5;
            rect.size.width += 10;
            touch.view.frame = rect;
            //修改frame
        }
    }
}

各种手势

1.点击手势(类似于btn的点击)

UITapGestureRecognizer *tapGR = [[UITapgestureRecognizer alloc] initWithTarget:self action:@selector(tapGR:)];

[view addGestureRecognizer:tapGR];

- (void)tapGR:(UITapGestureRecognizer *)tapGR

{

[self.view bringSubViewToFront:tapGR.view];//将手势对应的view移到最上层

}

2.移动手势

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

[view addGestureRecognizer:panGR];

 1 - (void)panGR:(UIPanGestureRecognizer *)panGR
 2 {
 3     CGPoint translation = [panGR translationInView:self.view];
 4     //获取手势移动的轨迹
 5
 6     panGR.view.center = CGPointMake(panGR.view.center.x + translation.x, panGR.view.center.y + translation.y);
 7     //根据手势的轨迹移动view
 8
 9     [panGR setTranslation:CGPointZero inView:self.view];
10     //每次移动以后都清空手势记录的轨迹
11 }

3.捏合手势

UIPinchGestureRecognizer *pinchGR = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGR:)];
         [view addGestureRecognizer:pinchGR];

1 - (void)pinchGR:(UIPinchGestureRecognizer *)pinchGR
2 {
3     pinchGR.view.transform = CGAffineTransformScale(pinchGR.view.transform, pinchGR.scale, pinchGR.scale);
4     //让view随着手势的缩放而缩放
5
6     pinchGR.scale = 1;
7     //缩放以后需要还原手势中记录的倍数
8 }

4.旋转手势

UIRotationGestureRecognizer *rotationGR = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGR:)];
    [view addGestureRecognizer:rotationGR];

1 - (void)rotationGR:(UIRotationGestureRecognizer *)rotationGR
2 {
3     rotationGR.view.transform = CGAffineTransformRotate(rotationGR.view.transform, rotationGR.rotation);
4     //让view随着手势的旋转而旋转
5
6     rotationGR.rotation = 0;
7     //旋转以后还原记录
8 }

5.长按手势

UILongPressGestureRecognizer *longGR = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longGR:)];
    [view addGestureRecognizer:longGR];

 1 - (void)longGR:(UILongPressGestureRecognizer *)longGR
 2 {
 3     NSLog(@"===%ld",longGR.state);
 4     //打印手势的状态(开始响应,改变,结束响应)
 5
 6     if (longGR.state == UIGestureRecognizerStateBegan) {
 7         //长按手势开始响应时触发
 8
 9         CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
10         //创建一个基础动画
11
12         basicAnimation.fromValue = [NSNumber numberWithFloat:0.5];
13         basicAnimation.toValue = @2;
14         //从哪里来,到哪里去
15
16         basicAnimation.autoreverses = YES;
17         //是否以动画方式返回
18
19         basicAnimation.duration = 0.1;
20         //单次动画时间
21
22         basicAnimation.repeatCount = 99;
23         //重复次数
24
25         [longGR.view.layer addAnimation:basicAnimation forKey:@"aa"];
26         //添加动画
27     }
28 }

6.轻扫手势(和移动手势有冲突)

UISwipeGestureRecognizer *swipeGR = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGR:)];
        //轻扫手势(和pan移动有冲突的)
         swipeGR.direction = UISwipeGestureRecognizerDirectionUp;
        //设置轻扫的方向
         [view addGestureRecognizer:swipeGR];

如果想实现多个方向的轻扫手势,需要创建多个,然后设置不同的方向。。。。。

 1 - (void)swipeGR:(UISwipeGestureRecognizer *)swipeGR
 2 {
 3     CGRect rect = swipeGR.view.frame;
 4
 5     //判断方向
 6     if (swipeGR.direction == UISwipeGestureRecognizerDirectionUp) {
 7         rect.origin.y -= 5;
 8         rect.size.height += 5;
 9     }
10
11     //& 按位与判断(这种用法只能是枚举值后面有1<<2这种位操作的)
12     if (swipeGR.direction & UISwipeGestureRecognizerDirectionLeft) {
13         rect.origin.x -= 5;
14         rect.size.width += 5;
15     }
16
17     swipeGR.view.frame = rect;
18 }
时间: 2024-10-19 23:30:13

手势。。。的相关文章

vue手势解决方案

1.需求 因为项目中要做一个可以移动.旋转和放缩具有合成图片的功能,例如: 剑可以随意移动,然后把位移.旋转角度和放缩值传给后台进行合成. 2.解决方案 网上搜到手势插件AlloyFinger,https://github.com/AlloyTeam/AlloyFinger 首先安装AlloyFinger:npm install alloyfinger 然后在Vue文件里面引用:import AlloyFinger from 'alloyfinger' 使用方法: mounted() { thi

手势事件

1.基本的手势事件主要有如下三个方法: dispatchTouchEvent : 判断该事件是否需要下发.返回true表示需要下发给下级视图,返回false表示不需要下发(交给自身的onTouchEvent处理).但是否最终下发,还需根据onInterceptTouchEvent的拦截结果. onInterceptTouchEvent : 判断当前容器是否需要拦截该事件.返回true表示予以拦截(交给自身的onTouchEvent处理).不放给下级视图,返回false表示不拦截该事件. onTo

【Bootstrap】3.优化站点资源、完成响应式图片、让传送带支持手势

A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap]2.作品展示站点 中的资源.特别的,来看一看我们能控制的.影响页面速度的重要因素 —— 文件大小,包括图片.CSS和 JavaScript 文件.只要简单几步,我们就可以给这些文件“瘦身”,缩短加载时间. A.1 优化图片 这些图片都通过 Photoshop 的 “保存为 Web 格式” 进行了一

Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller

原文地址:http://android.xsoftlab.net/training/gestures/scroll.html 在Android中,滑动经常由ScrollView类来实现.任何超出容器边界的布局都应该将自己内嵌在ScrollView中,以便提供可滚动的视图效果.自定义滚动只有在特定的场景下才会被用到.这节课将会描述这样一种场景:使用scroller显示一种可滚动的效果. 你可以使用Scroller或者OverScroller来收集一些滑动动画所需要的数据.这两个类很相似,但是Ove

九点(九宫格)式手势解锁自定义view

周末闲着没事,写了个手势解锁的view,实现起来也蛮快的,半天多一点时间就完事.把源码和资源贴出来,给大家分享,希望对大家有用. 效果,就跟手机上的九点手势解锁一样,上个图吧: 过程嘛感觉确实没啥好讲的了,涉及的知识以前的博客都说过了,无非就是canva,paint,touch事件这些,画画圆圈画画线条,剩下的就是细节处理逻辑了.都在代码里,所以这里就主要是贴资源吧. 这个自定义view就一个类,源码如下: package com.cc.library.view; import android.

UIKit框架(16)手势识别器

UIGestureRecognizer 利用手势识别器,能够轻松识别用户在某个view上面做一些常见的手势 UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势 UITapGestureRecognizer                敲击 UIPinchGestureRecognizer            捏合手势 UIPanGestureRecognizer               拖拽 UISwipeGestureRecog

2015-10-31 iOS 中的手势

UIkit框架中绝大多数的控件都是继承自,UIResponder类,UIResponder 类有强大的处理触摸事件的能力.假如一个UIview 收到一个触摸事件,那么这个触摸事件就会去进行寻找相应的响应事件,如果在该UIview 中找不到,就寻找UIView的对象去处理,如果UIView对象没有权利处理,就往当前的上一层UIViewController去寻找,如果找不到就再寻找 UIViewController 的对象去处理,如果这个对象仍然不能处理,就再往上层 UIWindow 对象去处理,如

iOS开发——仿Clear纯手势操作的UITableView

前言 在Clear应用中,用户无需任何按钮,纯靠不同的手势就可以完成对ToDoItem的删除.完成.添加.移动.具体来说,功能上有左划删除,右划完成,点击编辑,下拉添加.捏合添加.长按移动.这里将这些功能实现并记录. 左划删除与右划完成 所谓的左右滑动,就是自定义一个cell然后在上面添加滑动手势.在处理方法中计算偏移量,如果滑动距离超过cell宽度一半,就删除它,或者是为文本添加删除线等来完成它:如果没有超过一半,那么就用动画把cell归位. 效果图如下: 关键代码如下: - (void)ha

iOS小米遥控器的手势监听及UI实现

这篇文章通过实例实现了一个类似小米手势遥控器的功能页面. 效果图如下所示: 触摸事件的响应通过对系统的触摸实践监听来进行. 通过一个数组来对点的集合进行缓存和分析. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (!self.allowsInteraction) return; UITouch *touch = [touches anyObject]; CGPoint start = [touch lo

带有ListView的界面无法通过手势左右滑动切换界面问题解决办法

问题描述: 在做OnGestureListener滑动切换窗口的时候,会遇到这样的问题.就是当界面中含有ListView的时候,OnGestureListener的左右触屏滑动就被ListView自己吃掉了. 问题分析: 在Android系统中,事件的分发和响应都按照一定的优先级仅仅有条的进行着.如果Activity中包含ListView那么系统的onTouchEvent事件会优先分发给ListView去处理,这时ListView的OnItemClickListener监听器会优先响应onTou