手势识别之平移、缩放、长按、旋转、滑动

简介:

前面了解了手势识别的点击以及代理方法,其他的几个手势识别都是差不多


#import "ViewController.h"
 
@interface ViewController ()
@property(nonatomic,strong)UIImageView *imgView;
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.imgView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"test.jpg"]];
    self.imgView.frame=CGRectMake(100, 100, 100, 100);
    self.imgView.userInteractionEnabled=YES;
    self.imgView.multipleTouchEnabled=YES;
    [self.view addSubview:self.imgView];
     
     //拖动
    UIPanGestureRecognizer *panGestureRecognizer=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGesture:)];
    [self.imgView addGestureRecognizer:panGestureRecognizer];
     
    //滑动手势
    UISwipeGestureRecognizer *swipeGestureRecognizer=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGesture:)];
    //方向
    swipeGestureRecognizer.direction=UISwipeGestureRecognizerDirectionRight|UISwipeGestureRecognizerDirectionLeft;
    [self.imgView addGestureRecognizer:swipeGestureRecognizer];
     
    //长按手势
    UILongPressGestureRecognizer *longPressGestureRecongnizer=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressGesture:)];
     //按的最短时间
    longPressGestureRecongnizer.minimumPressDuration=2.0;
    // 长按手势识别之前点击次数
    longPressGestureRecongnizer.numberOfTapsRequired=1;
    //需要几个手指
    longPressGestureRecongnizer.numberOfTouchesRequired=1;
    //运行偏移量
    longPressGestureRecongnizer.allowableMovement=10.0;
    [self.imgView addGestureRecognizer:longPressGestureRecongnizer];
     
    //旋转
    UIRotationGestureRecognizer *rotationGestureRecognizer=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGesture:)];
    [self.imgView addGestureRecognizer:rotationGestureRecognizer];
     
    //缩放
    UIPinchGestureRecognizer *pinchGestureRecognizer=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGesture:)];
    [self.imgView addGestureRecognizer:pinchGestureRecognizer];
     
     
}
//平移
-(void)panGesture:(UIPanGestureRecognizer*)pan
{
    //在View中的位置
    CGPoint point=[pan locationInView:pan.view];
    //在View中的移动量 以手指按下的为原点
    CGPoint point1=[pan translationInView:self.view];
    NSLog(@"%@",NSStringFromCGPoint(point1));
//    NSLog(@"%@",NSStringFromCGPoint(point1));
    CGPoint temp=self.imgView.center;
    temp.x+=point1.x;
    temp.y+=point1.y;
    self.imgView.center=temp;
    //偏移量是增加的应该设为0
    [pan setTranslation:CGPointZero inView:pan.view];
}
//长按
-(void)longPressGesture:(UIGestureRecognizer*)gestureRecognizer
{
    NSLog(@"UILongPressGestureRecognizer");
}
 //滑动
-(void)swipeGesture:(UIGestureRecognizer *)gestureRecognizer
{
     NSLog(@"UISwipeGestureRecognizer");
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
     
}
//旋转
-(void)rotationGesture:(UIRotationGestureRecognizer *)gestureRecognizer
{
    NSLog(@"旋转的角度:%lf",gestureRecognizer.rotation);
//    self.imgView.transform=CGAffineTransformMakeRotation(gestureRecognizer.rotation);
    self.imgView.transform=CGAffineTransformRotate(self.imgView.transform, gestureRecognizer.rotation);
    gestureRecognizer.rotation=0;
}
//缩放
-(void)pinchGesture:(UIPinchGestureRecognizer *)pinchGesture
{
    NSLog(@"%lf",pinchGesture.scale);
//    self.imgView.transform=CGAffineTransformMakeScale(pinchGesture.scale, pinchGesture.scale);
    self.imgView.transform=CGAffineTransformScale(self.imgView.transform, pinchGesture.scale, pinchGesture.scale);
    //回初始值
    pinchGesture.scale=1.0;
}
 
@end


相关文章
|
存储 SQL 安全
MySQL 安全加固配置(等保二级)
数据库安全是等保测评和网络安全中的重要的一项内容,本文介绍一些常见的加固配置。
5039 0
|
11月前
|
传感器 人机交互 定位技术
XR交互技术趋势:6DoF追踪、手势识别、眼动跟踪……
XR交互技术与实时云渲染共同推动了虚拟现实和增强现实的沉浸式体验发展。XR交互技术通过6DoF追踪、手势追踪、眼动追踪等手段,提供更自然、精准的用户交互方式;而实时云渲染则利用云端计算能力,为终端设备呈现高质量、低延迟的复杂图形内容。两者结合,使用户在XR环境中获得更加真实、流畅的体验。未来,XR交互技术将向多模态、精细化方向发展,进一步提升用户的沉浸感和交互体验。
806 20
|
8月前
|
机器学习/深度学习 存储 文字识别
Llama 4上线魔搭社区!社区推理、微调实战教程来啦!
近期,Meta推出了Llama 4系列的首批模型: Llama 4 Scout 和 Llama 4 Maverick。
681 12
|
10月前
|
人工智能 IDE 程序员
从 AI Coding 演进路径看通义灵码 AI 程序员的发布,让更多 idea 变成产品
从 AI Coding 演进路径看通义灵码 AI 程序员的发布,让更多 idea 变成产品
|
负载均衡 算法 应用服务中间件
这些负载均衡都解决哪些问题?服务、网关、NGINX?
这些负载均衡都解决哪些问题?服务、网关、NGINX?
478 1
|
Prometheus 监控 Cloud Native
实时计算 Flink版产品使用问题之怎么关闭HDFS的Web界面
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
机器学习/深度学习 JSON 自然语言处理
新一代开源语音库CoQui TTS冲到了GitHub 20.5k Star
新一代开源语音库CoQui TTS冲到了GitHub 20.5k Star
1117 0
|
JavaScript 前端开发 应用服务中间件
【Vue】宝塔面板服务器配置Vue项目
【Vue】宝塔面板服务器配置Vue项目
798 0
【Vue】宝塔面板服务器配置Vue项目
|
存储
数制间的转换,原码、反码、补码
数制间的转换,原码、反码、补码
1510 0
数制间的转换,原码、反码、补码
|
XML 设计模式 Java
Spring高手之路1——深入理解与实现IOC依赖查找与依赖注入
本文通过详细的代码示例,详细解析了Spring框架中IOC的两种核心实现方式:依赖查找和依赖注入。我们通过创建基本的IOC依赖查找实例,详解了如何在实践中运用这两种手段,并在三层架构中体验其使用方式。同时,我们也深度对比了依赖查找与依赖注入的优缺点和应用场景,为读者在面试中解答相关问题提供了参考。
855 1
Spring高手之路1——深入理解与实现IOC依赖查找与依赖注入