制作锥形按钮并重写UIbutton点击区域

一个自定义图表的需求,顺便分享一下


6312E625-29F3-499F-8E71-DC332CBA91BC.png

设置点击区域,path为按钮的layer

class CusButton: UIButton {
    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        let res = super.point(inside: point, with: event)
        if res {
            //内部点位相对的坐标系为视图本身
            
            //左侧起始点
            let leftbeginpoint = CGPoint(x: 0, y: self.frame.size.height)
            //中间点
            let centerpoint = CGPoint(x: self.frame.size.width/2, y: 0)
            //控制点
            let controlpoint = CGPoint(x: self.frame.size.width/2,
                                           y: self.frame.size.height*6/7)
            //右侧起始点
            let rightbeginpoint = CGPoint(x: self.frame.size.width,
                                          y: self.frame.size.height)
            
            let path = UIBezierPath()
            path.move(to: leftbeginpoint)
            path.addQuadCurve(to: centerpoint, controlPoint: controlpoint)
            path.addQuadCurve(to: rightbeginpoint, controlPoint: controlpoint)
            path.addLine(to: leftbeginpoint)
            path.close()
            
            if path.contains(point) {
                return true
            }
            
            return false
        }
        return false
    }
}

设置layer,可在自定义button里设置,但是目前不会做-。-

//制作三角柱
    func creatTriangleColumn(columnlable: CusButton){
        //内部点位相对的坐标系为视图本身
        //左侧起始点
        let leftbeginpoint = CGPoint(x: 0, y: columnlable.frame.size.height)
        //中间点
        let centerpoint = CGPoint(x: columnlable.frame.size.width/2, y: 0)
        //控制点
        let controlpoint = CGPoint(x: columnlable.frame.size.width/2,
                                       y: columnlable.frame.size.height*6/7)
        //右侧起始点
        let rightbeginpoint = CGPoint(x: columnlable.frame.size.width,
                                      y: columnlable.frame.size.height)
        
        
        let path = UIBezierPath()
        path.move(to: leftbeginpoint)
        path.addQuadCurve(to: centerpoint, controlPoint: controlpoint)
        path.addQuadCurve(to: rightbeginpoint, controlPoint: controlpoint)
        path.addLine(to: leftbeginpoint)
        path.close()
        let shapelayer = CAShapeLayer()
        shapelayer.path = path.cgPath
        shapelayer.fillColor = danblue3.cgColor
        columnlable.layer.addSublayer(shapelayer)
        
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • UIButton实现区域外点击 今天项目开发中偶然需要这个功能,一个按钮区域大小外也要能够点击响应 因为项目是很早...
    spicyShrimp阅读 605评论 0 0
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,347评论 0 13
  • 感觉自己有点神经衰弱,总是觉得手机响了;屋外有人走过;每次妈妈不声不响的进房间突然跟我说话,我都会被吓得半死!一整...
    章鱼的拥抱阅读 2,206评论 4 5
  • 夜莺2517阅读 127,759评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,954评论 1 6