问题: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方法需要你仔细设置一下,让用户感觉到只有点到图表才会旋转,而不是空白处。