美文网首页
「iOS」解决Charts中图表手势与UIScrollView滑

「iOS」解决Charts中图表手势与UIScrollView滑

作者: ray_1942 | 来源:发表于2019-10-21 16:28 被阅读0次
    问题:Charts中图表手势与UIScrollView滑动手势冲突

    我在UITableView(UIScrollView)中添加了PieChartView后出现手势混乱。如旋转图表的圆环时,UITableView(UIScrollView)也跟着跑了,而圆环却不转了。🤡

    解决思路:获取当前点击操作及位置,当用户点的是图表就将UITableView(UIScrollView)的isScrollEnabled置为false
    实现代码:

    在发生冲突的viewController或view中添加extension
    如果你单独封装了一个图表的view,那么就在那个view里override hitTest方法就行

    extension UITableView{
        
        /// 重写tableview hittest方法
        /// 1、遍历subviews
        /// 2、查找手势冲突的view
        /// 3、将当前点击Point转换到所要解决手势冲突的view上
        /// 4、判断当前点击是否在这个view上
        /// 5、修改冲突手势
        /// 6、否则返回原点击事件
        open override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
            //  我的图表是添加在tableview的headerview上,所以直接取到headerview即可
            let headerView = self.tableHeaderView
            if let tmpHeaderView = headerView{
                for subview in tmpHeaderView.subviews{
                    if subview is XXXChartView{
                        let xxxChartView = subview as? XXXChartView
                        if let tmpChartView = xxxChartView{
                            let pieChartView = tmpChartView.pieChartView
                            let newPoint = tmpHeaderView.convert(point, to: pieChartView)
                            //这个方法是关键,获取是否点到了你的图表
                            let isHit = pieChartView.point(inside: newPoint, with: event)
                            //点击到了图表则不可滚动
                            self.isScrollEnabled = !isHit
                        }
                    }
                }
            }
            return super.hitTest(point, with: event)
        }
    }
    
    

    至此问题完美解决。
    需要注意的是:图表的大小和setExtraOffsets方法需要你仔细设置一下,让用户感觉到只有点到图表才会旋转,而不是空白处。

    相关文章

      网友评论

          本文标题:「iOS」解决Charts中图表手势与UIScrollView滑

          本文链接:https://www.haomeiwen.com/subject/pmitvctx.html