我想在我的iOS应用程序中有一个旋转的饼图。我发现MDRotatingPieChart控件似乎可以满足我的大部分需求。但是,当我将其放到非(0,0)
的原点并开始拖动时,它也会同时更改饼图的X和Y位置。它不应该这样做。有人可以帮我吗?
这是似乎相关的代码
pieChart = MDRotatingPieChart(frame: CGRect(x: 30, y: 30, width: view.frame.width + 30 , height: view.frame.width + 30 ))
并在
MDRotatingPieChart
内部:override func continueTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
hasBeenDraged = true
let currentPoint = touch.location(in: self)
let deltaX = currentPoint.x - pieChartCenter.x - 15
let deltaY = currentPoint.y - pieChartCenter.y - 15
let ang = atan2(deltaY,deltaX);
let angleDifference = delta - ang
self.transform = self.transform.rotated(by: -angleDifference)
let savedTransform = slicesArray[0].labelObj?.transform
let savedTransformCenter = labelCenter.transform
for slice in slicesArray {
if(slice.labelObj != nil) {
slice.labelObj?.transform = savedTransform!.rotated(by: angleDifference)
}
}
labelCenter.transform = savedTransformCenter.rotated(by: angleDifference)
return true;
}
最佳答案
首先,看起来您应该使用MDRotatingPieChart-Example folder的MDRotatingPieChart.swift,因为它更现代。仍然包含您描述的错误,并且错误的根源似乎是原始开发人员不知道frame
和bounds
之间的区别,这取决于 UIView
doc:
因此,要解决此问题,您可以找到以下line in createSlice
mask.frame = self.frame
并替换为
mask.frame = self.bounds
P.S. 您的代码中有一行
pieChart = MDRotatingPieChart(frame: CGRect(x: 30, y: 30, width: view.frame.width + 30 , height: view.frame.width + 30 ))
这是可疑的。您几乎永远都不希望 child 的
width
或height
超过相应 parent 的尺寸。你可能想要pieChart = MDRotatingPieChart(frame: CGRect(x: 30, y: 30,
width: view.frame.width - 30 , height: view.frame.width - 30 ))
甚至(如果您想同时在X和Y中使用对称边距)
pieChart = MDRotatingPieChart(frame: CGRect(x: 30, y: 30,
width: view.frame.width - 2*30 , height: view.frame.width - 2*30 ))
反而。