屏幕中上下左右滑动实现某些特定操作

OneSwift - iOS Tips Based On Swift

除了传统的点击指定区域或者按钮执行某些操作外,我们还可以通过检测用户在屏幕上的轨迹进行反馈。可以是坐标的具体位移,也可以是今天为大家分享的指定方向的滑动。

上、下、左、右的滑动有默认的方法,只要添加了方法边能够检测到同时进行我们想要的操作。

一、添加四个方向的滑动检测

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