Swift之手势解

来源:互联网 发布:个人网页源码 编辑:程序博客网 时间:2024/05/14 18:42

看到一些APP应用里的手势解锁挺有意思也挺好奇的,所以自己从网上dang了些素材实现了下这个功能。

在这里先记录下一些知识点:

1、绘制九宫格样式的按钮组

    //创建九宫格按钮组

    func createButton()

    {

        var secret = 0

        for row in0...2

        {

            for col in 0...2

            {

                //设置九个按钮的位置,图片

                let buttonDistance = 100//间距

                let firstBtnPointX = 0//第一个按钮的X

                let firstBtnPointY = 0//第一个按钮的Y

                let tempX:(CGFloat) =CGFloat(firstBtnPointX + col*buttonDistance)

                let tempY:(CGFloat) =CGFloat(firstBtnPointY + row*buttonDistance)

                //声明按钮

                let btn:(UIButton) =UIButton(type:UIButtonType.Custom)

                btn.userInteractionEnabled = false //关闭用户交互

                btn.frame = CGRectMake(tempX, tempY, 80, 80)//按钮位置和大小设置

                btn.setImage(UIImage(named:"gesture_node_normal"), forState:UIControlState.Normal)//默认

                btn.setImage(UIImage(named:"gesture_node_highlighted"), forState:UIControlState.Selected)//选中

                

                btn.tag = secret++ //用来当作密码0-8

                self.addSubview(btn)

                

            }

        }

    }

2、根据触摸获取的坐标点获取按钮

首先根据事件传入的Set<UITouch>获取当前试图中触摸点的位置,在根据触摸点的位置获取按钮。

   //获取位置传入当前触摸的视图

   let pos:(CGPoint) = (touch?.locationInView(touch!.view))!

   //遍历当前View的子视图获取按钮

   for btninself.subviews

   {

     if CGRectContainsPoint(btn.frame, point)

     {

        return btn as? UIButton

     }

   }

3、根据手势滑动经过的按钮坐标绘制线

     1)需要先定义一个存储纪动经过按钮的数据

     2)绘制线条需要监听3个事件分别是:触摸开始、触摸移动、触摸结束将经过的按钮保存到数组中。每次事件结束需要调用self.setNeedsDisplay()来绘制视图

     3)使用UIBezierPath对象来绘制连接线:

       override func drawRect(rect:CGRect) {

        //没有按钮

        if self.btnSelectArr.count ==0

        {

            return //直接返回

        }

        //有按钮,则绘制

        let path:(UIBezierPath) =UIBezierPath()//创建路径

        for index in 0...self.btnSelectArr.count -1

        {

            let btn:(UIButton) =self.btnSelectArr.objectAtIndex(index)as!UIButton

            //第一个按钮(每次会在的起点)

            if index == 0

            {

                path.moveToPoint(btn.center)//从第一个按钮开始移动

            }

            else

            {

                path.addLineToPoint(btn.center)//连接

            }

        }

        path.lineWidth = 8 //线宽

        UIColor.blueColor().set()//颜色

        path.stroke()//绘制

    }

  源码:http://yunpan.cn/c3VdCCzTgBV4E (提取码:3563)

0 0
原创粉丝点击