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任务栏设置隐藏小组件

