屏幕中上下左右滑动实现某些特定操作
除了传统的点击指定区域或者按钮执行某些操作外,我们还可以通过检测用户在屏幕上的轨迹进行反馈。可以是坐标的具体位移,也可以是今天为大家分享的指定方向的滑动。
上、下、左、右的滑动有默认的方法,只要添加了方法边能够检测到同时进行我们想要的操作。
一、添加四个方向的滑动检测
在OneClock
的开发中,每个时钟页面的viewDidLoad
我加入了如下代码,分别绑定了四个方向滑动的函数swipe
,具体的函数操作可以在swipe
中设置。
//设置手势
let swipeRight = UISwipeGestureRecognizer(target:self, action:#selector(swipe(_:)))
swipeRight.direction = .right
self.view.addGestureRecognizer(swipeRight)
let swipeLeft = UISwipeGestureRecognizer(target:self, action:#selector(swipe(_:)))
swipeLeft.direction = .left
self.view.addGestureRecognizer(swipeLeft)
let swipeUp = UISwipeGestureRecognizer(target:self, action:#selector(self.toSetting))
swipeUp.direction = .up
self.view.addGestureRecognizer(swipeUp)
let swipeDown = UISwipeGestureRecognizer(target:self, action:#selector(self.toSetting))
swipeDown.direction = .down
self.view.addGestureRecognizer(swipeDown)
二、对不同方向的滑动做不同处理
设置swipe
中左右滑动改变值,上下滑动呼出设置菜单,设置菜单的显示由toSetting
包含,因此具体的代码如下。
//划动手势的响应
func swipe(_ recognizer:UISwipeGestureRecognizer){
if recognizer.direction == .left{
print("向左滑动")
appDelegate.mytheme.secondIndex = (appDelegate.mytheme.secondIndex+1) % 2
appDelegate.mytheme.settingIndex = appDelegate.mytheme.secondIndex
appDelegate.saveContext()
loadTheme()
}else if recognizer.direction == .right{
print("向右滑动")
appDelegate.mytheme.secondIndex = (appDelegate.mytheme.secondIndex+1) % 2
appDelegate.mytheme.settingIndex = appDelegate.mytheme.secondIndex
appDelegate.saveContext()
loadTheme()
}else if recognizer.direction == .up{
print("向上滑动")
self.toSetting()
loadTheme()
}else if recognizer.direction == .down{
print("向下滑动")
self.toSetting()
loadTheme()
}
let point=recognizer.location(in: self.view)
//这个点是滑动的起点
print(point.x)
print(point.y)
}
是不是比较简单? 其实在做的过程中还尝试过增加手指坐标变化的相关操作,但是目前发现坐标变化和这个方法会有冲突,目前还没有搞明白如何解决。
最后我们看看效果,上下滑动出菜单,左右滑动变颜色:
GitHub:OneSwift - iOS Tips Based On Swift
微博:xDEHANG