【发布时间】:2016-09-21 13:12:31
【问题描述】:
我目前正在开发一个使用 CorePlot 库(2.1 版)绘制散点图的 iOS 应用程序。我的散点图画得很好,下一步我想在图的顶部画一个半透明的置信椭圆。我编写了一个类来计算椭圆的主轴和次轴以及所需的旋转角度。我的 ConfidenceEllipse 类实现了一个 getPath() 方法,该方法返回一个表示要绘制的椭圆的 CGPath。
func getPath() -> CGPath
{
var ellipse: CGPath
var transform = CGAffineTransformIdentity
transform = CGAffineTransformTranslate (transform, CGFloat(-self.meanX), CGFloat(-self.meanY))
transform = CGAffineTransformRotate (transform, CGFloat(self.angle))
transform = CGAffineTransformTranslate (transform, CGFloat(self.meanX), CGFloat(self.meanY))
ellipse = CGPathCreateWithEllipseInRect(CGRectMake (CGFloat(-self.mainHalfAxis), CGFloat(-self.minorHalfAxis), CGFloat(2 * self.mainHalfAxis), CGFloat(2 * self.minorHalfAxis)),&transform)
return ellipse
}
在网上搜索了一段时间后,似乎注释是要走的路,所以我尝试了这个:
let graph = hostView.hostedGraph!
let space = graph.defaultPlotSpace
let ellipse = ConfidenceEllipse(chiSquare: 5.991)
ellipse.analyze(self.samples)
let annotation = CPTPlotSpaceAnnotation (plotSpace: space!, anchorPlotPoint: [0,0])
let overlay = CPTBorderedLayer (frame: graph.frame)
overlay.outerBorderPath = ellipse.getPath()
let fillColor = CPTColor.yellowColor()
overlay.fill = CPTFill (color: fillColor)
annotation.contentLayer = overlay
annotation.contentLayer?.opacity = 0.5
graph.addAnnotation(annotation)
这样做,会给我以下 Screenshot 如您所见,叠加层占据了整个框架的大小,考虑到我在创建 CPTBorderedLayer 对象时传递了框架尺寸这一事实,这似乎是合乎逻辑的。我也尝试将构造函数留空,但覆盖层根本不显示。所以我想知道,这里有什么我想念的吗?
【问题讨论】: