問題:Charts中圖表手勢與UIScrollView滑動手勢沖突
我在UITableView(UIScrollView)中添加了PieChartView后出現(xiàn)手勢混亂。如旋轉圖表的圓環(huán)時,UITableView(UIScrollView)也跟著跑了,而圓環(huán)卻不轉了。??
解決思路:獲取當前點擊操作及位置,當用戶點的是圖表就將UITableView(UIScrollView)的isScrollEnabled置為false
實現(xiàn)代碼:
在發(fā)生沖突的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方法需要你仔細設置一下,讓用戶感覺到只有點到圖表才會旋轉,而不是空白處。