IOS 开发之swift中手势的实例详解

发布时间 - 2026-01-11 03:12:53    点击率:

IOS 开发之swift中手势的实例详解

手势操作主要包括如下几类


手势 属性 说明
点击 UITapGestureRecognizer numberOfTapsRequired:点击的次数;numberOfTouchesRequired:点击时有手指数量 设置属性 numberOfTapsRequired 可以实现单击,或双击的效果
滑动 UISwipeGestureRecognizer direction:滑动方向 direction 滑动方向分为上Up、下Down、左Left、右Right
拖动 UIPanGestureRecognizer 在拖动过程中,通过方法 translationInView 获取拖动时的位移
长按 UILongPressGestureRecognizer minimumPressDuration:长按最少时间
旋转 UIRotationGestureRecognizer
缩放 UIPinchGestureRecognizer

注意:手势效果在实施过程中,存在几种状态:

* Began
* Ended
* Cancelled
* Failed
* Possible

手势效果图

代码示例

// 点击
let label = UILabel(frame: CGRectMake(10.0, 10.0, (self.view.frame.size.width - 10.0 * 2), 60.0))
self.view.addSubview(label)
label.backgroundColor = UIColor.lightGrayColor()
label.text = "手势操作-单指单击手势";
label.adjustsFontSizeToFitWidth = true
label.textAlignment = .Center;
// 添加手势
let tapRecognizer = UITapGestureRecognizer(target: self, action: Selector("tapClick:"))
tapRecognizer.numberOfTapsRequired = 1
tapRecognizer.numberOfTouchesRequired = 1
label.userInteractionEnabled = true
label.addGestureRecognizer(tapRecognizer)

// 手势响应方法
func tapClick(recognizer:UITapGestureRecognizer)
{
    let label:UILabel = recognizer.view as! UILabel
    label.textColor = UIColor.redColor()
}

// 滑动
let label = UILabel(frame: CGRectMake(10.0, 10.0, (self.view.frame.size.width - 10.0 * 2), 60.0))
self.view.addSubview(label)
label.backgroundColor = UIColor.lightGrayColor()
label.text = "手势操作-左滑手势";
label.adjustsFontSizeToFitWidth = true
label.textAlignment = .Center;
// 添加手势
let swipeLeftRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipeLeftClick:"))
swipeLeftRecognizer.direction = .Left
swipeLeftRecognizer.numberOfTouchesRequired = 1
label.userInteractionEnabled = true
label.addGestureRecognizer(swipeLeftRecognizer)

// 手势响应方法
func swipeLeftClick(recognizer:UISwipeGestureRecognizer)
{
    let label = recognizer.view
    label!.backgroundColor = UIColor.orangeColor()
}

// 拖动
let label = UILabel(frame: CGRectMake(10.0, 10.0, 100.0, 100.0))
self.view.addSubview(label)
label.backgroundColor = UIColor.lightGrayColor()
label.text = "手势操作-拖动手势";
label.adjustsFontSizeToFitWidth = true
label.textAlignment = .Center;
// 添加手势
let panRecognizer = UIPanGestureRecognizer(target: self, action: Selector("panClick:"))
label.userInteractionEnabled = true
label.addGestureRecognizer(panRecognizer)

var pointValue:CGPoint! = CGPointZero // 移动
// 手势响应方法
func panClick(recognizer:UIPanGestureRecognizer)
{
    let label:UILabel = recognizer.view as! UILabel

    let point = recognizer.translationInView(label)
    print("pan point = \(point)")

    // 移动
    label.transform = CGAffineTransformMakeTranslation(point.x + self.pointValue.x, point.y + self.pointValue.y)

    if recognizer.state == .Began
    {
      label.backgroundColor = UIColor.yellowColor()
      self.view.bringSubviewToFront(label)
    }
    else if recognizer.state == .Ended
    {
      label.backgroundColor = UIColor.lightGrayColor()

      self.pointValue.x += point.x
      self.pointValue.y += point.y
    }
}

// 缩放
let label = UILabel(frame: CGRectMake(10.0, 10.0, 200.0, 200.0))
self.view.addSubview(label)
label.backgroundColor = UIColor.lightGrayColor()
label.text = "手势操作-捏合手势";
label.adjustsFontSizeToFitWidth = true
label.textAlignment = .Center;
// 添加手势
let pinchRecognizer = UIPinchGestureRecognizer(target: self, action: Selector("pinchClick:"))
label.userInteractionEnabled = true
label.addGestureRecognizer(pinchRecognizer)

// 手势响应方法
var scaleValue:CGFloat! = 1.0 // 缩放
func pinchClick(recognizer:UIPinchGestureRecognizer)
{
    let label:UILabel = recognizer.view as! UILabel

    let scale = recognizer.scale;
    if scale > 1.0
    {
      // 放大
      label.transform = CGAffineTransformMakeScale(self.scaleValue + scale - 1.0, self.scaleValue + scale - 1.0)
    }
    else
    {
      // 缩小
      label.transform = CGAffineTransformMakeScale(self.scaleValue * scale, self.scaleValue * scale)
    }

    if recognizer.state == .Began
    {
      label.backgroundColor = UIColor.greenColor()
      self.view.bringSubviewToFront(label)
    }
    else if recognizer.state == .Ended
    {
      label.backgroundColor = UIColor.lightGrayColor()

      if scale > 1.0
      {
        self.scaleValue = self.scaleValue + scale - 1.0;
      }
      else
      {
        self.scaleValue = self.scaleValue * scale
      }
    }
}

// 旋转
let label = UILabel(frame: CGRectMake(10.0, 10.0, 200.0, 200.0))
self.view.addSubview(label)
label.backgroundColor = UIColor.lightGrayColor()
label.text = "手势操作-旋转手势";
label.adjustsFontSizeToFitWidth = true
label.textAlignment = .Center;
// 添加手势
let rotationRecognizer = UIRotationGestureRecognizer(target: self, action: Selector("ratotionClick:"))
label.userInteractionEnabled = true
label.addGestureRecognizer(rotationRecognizer)

var rotationValue:CGFloat! = 1.0 // 旋转
// 手势响应方法
func ratotionClick(recognizer:UIRotationGestureRecognizer)
{
    let label:UILabel = recognizer.view as! UILabel

    let rotation = recognizer.rotation
    label.transform = CGAffineTransformMakeRotation(rotation + self.rotationValue)

    if recognizer.state == .Began
    {
      label.backgroundColor = UIColor.greenColor()
      self.view.bringSubviewToFront(label)
    }
    else if recognizer.state == .Ended
    {
      label.backgroundColor = UIColor.lightGrayColor()

      self.rotationValue = self.rotationValue + rotation
    }
}

// 长按
let label = UILabel(frame: CGRectMake(10.0, 10.0, (self.view.frame.size.width - 10.0 * 2), 60.0))
self.view.addSubview(label)
label.backgroundColor = UIColor.lightGrayColor()
label.text = "手势操作-长按手势";
label.adjustsFontSizeToFitWidth = true
label.textAlignment = .Center;
// 添加手势
let pressRecognizer = UILongPressGestureRecognizer(target: self, action: Selector("pressClick:"))
    pressRecognizer.minimumPressDuration = 3.0
    label.userInteractionEnabled = true
    label.addGestureRecognizer(pressRecognizer)

// 手势响应方法
func pressClick(recognizer:UILongPressGestureRecognizer)
{
    let label:UILabel = recognizer.view as! UILabel

    if recognizer.state == .Began
    {
      let alertView = UIAlertView(title: nil, message: "长按响应", delegate: nil, cancelButtonTitle: "知道了")
      alertView.show()

      label.backgroundColor = UIColor.orangeColor()
      self.view.bringSubviewToFront(label)
    }
    else if recognizer.state == .Ended
    {
      label.backgroundColor = UIColor.lightGrayColor()
    }
}

 如有疑问请留言或者到本站社区交流讨论,感谢阅读希望能帮助到大家,谢谢大家对本站的支持!


# swift中手势  # IOS  # 手势的开发  # Swift  # 手势的实例  # IOS开发Swift 与 OC相互调用详解  # iOS Swift利用UICollectionView实现无限轮播功能(原理)详解  # iOS开发中Swift逃逸闭包知识  # iOS Swift控制器转场动画示例代码  # iOS Swift读取本地json文件报错的解决方法  # iOS Swift 值类型与引用类型使用区别基础详解  # 拖动  # 单击  # 过程中  # 如有  # 希望能  # 几种  # 双击  # 可以实现  # 谢谢大家  # 主要包括  # 为上  # 几类  # 疑问请  # 知道了  # cpp  # brush  # true  # label  # Ended  # Began 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  如何用y主机助手快速搭建网站?  如何确保西部建站助手FTP传输的安全性?  香港服务器WordPress建站指南:SEO优化与高效部署策略  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  EditPlus中的正则表达式实战(6)  Python文件操作最佳实践_稳定性说明【指导】  百度浏览器如何管理插件 百度浏览器插件管理方法  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  黑客入侵网站服务器的常见手法有哪些?  Android实现代码画虚线边框背景效果  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  Swift中switch语句区间和元组模式匹配  中山网站推广排名,中山信息港登录入口?  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  昵图网官方站入口 昵图网素材图库官网入口  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  Android 常见的图片加载框架详细介绍  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  个人网站制作流程图片大全,个人网站如何注销?  详解jQuery停止动画——stop()方法的使用  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  什么是javascript作用域_全局和局部作用域有什么区别?  如何在阿里云通过域名搭建网站?  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  在centOS 7安装mysql 5.7的详细教程  如何用美橙互联一键搭建多站合一网站?  如何用花生壳三步快速搭建专属网站?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  Internet Explorer官网直接进入 IE浏览器在线体验版网址  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Android滚轮选择时间控件使用详解  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  北京的网站制作公司有哪些,哪个视频网站最好?  浅谈redis在项目中的应用  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  JS碰撞运动实现方法详解  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件