В настоящее время я работаю над приложением iOS, где я использую библиотеку CorePlot (версия 2.1), чтобы нарисовать график рассеяния. Мой график рассеяния рисует хорошо, и на следующем шаге я хотел бы нарисовать полупрозрачный эллипс доверия поверх сюжета. Я написал класс, вычисляющий основную и вспомогательную ось и необходимый угол поворота моего эллипса. Мой класс 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. Я также попробовал оставить конструктор пустым, но затем наложение вообще не отображается. Поэтому мне интересно, есть ли что-то, чего я здесь не хватает?
Вы правы, я забыл масштабирование эллипса. Я попытался инициализировать пограничную аннотацию как границами области графика, так и эллипса, более поздним масштабированием аннотации границы, чтобы она полностью покрывала область точками на участке рассеяния, но, к сожалению, эллипс по-прежнему не отображается. Аннотации по-прежнему отображаются как прямоугольник. Считаете ли вы, что настройка внешнего пограничника является виновником? Это произошло со мной после прочтения следующего сообщения http://stackoverflow.com/questions/11588862/changing-the-layer-shape-for-cptplotspaceannotation. – Neckelatius