Ver código fonte

Deduplicate BalloonMarker code

Daniel Cohen Gindi 5 anos atrás
pai
commit
db95c0f43f

+ 6 - 8
ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj/project.pbxproj

@@ -22,7 +22,6 @@
 		225B363A1F6EBA040005B3D5 /* DateValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36361F6EB9FE0005B3D5 /* DateValueFormatter.swift */; };
 		225B363B1F6EBA040005B3D5 /* LargeValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36371F6EB9FE0005B3D5 /* LargeValueFormatter.swift */; };
 		225B36401F6EBA1D0005B3D5 /* XYMarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B363D1F6EBA180005B3D5 /* XYMarkerView.swift */; };
-		225B36411F6EBA1D0005B3D5 /* BalloonMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B363E1F6EBA180005B3D5 /* BalloonMarker.swift */; };
 		225B36421F6EBA1D0005B3D5 /* RadarMarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B363F1F6EBA180005B3D5 /* RadarMarkerView.swift */; };
 		225B365B1F6EBA470005B3D5 /* MultipleLinesChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36441F6EBA410005B3D5 /* MultipleLinesChartViewController.swift */; };
 		225B365C1F6EBA470005B3D5 /* MultipleBarChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36451F6EBA410005B3D5 /* MultipleBarChartViewController.swift */; };
@@ -80,6 +79,8 @@
 		5B0CC7851ABB875400665592 /* PieChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B0CC7831ABB875400665592 /* PieChartViewController.m */; };
 		5B0CC7861ABB875400665592 /* PieChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B0CC7841ABB875400665592 /* PieChartViewController.xib */; };
 		5B1B5DAB1E911A15006D1375 /* RealmDemosViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B1B5DA91E911A15006D1375 /* RealmDemosViewController.xib */; };
+		5B442CD223D9B0A300B1F801 /* BalloonMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */; };
+		5B442CD323D9B0AB00B1F801 /* BalloonMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */; };
 		5B57BBB51A9B26AA0036A6CC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B57BBB41A9B26AA0036A6CC /* main.m */; };
 		5B57BBB81A9B26AA0036A6CC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B57BBB71A9B26AA0036A6CC /* AppDelegate.m */; };
 		5B57BBBB1A9B26AA0036A6CC /* DemoListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B57BBBA1A9B26AA0036A6CC /* DemoListViewController.m */; };
@@ -93,7 +94,6 @@
 		5B8EAF301AB32E15009697AA /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5B8EAF2F1AB32E15009697AA /* Images.xcassets */; };
 		5B9624411B38608C007763E2 /* NegativeStackedBarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B96243F1B38608C007763E2 /* NegativeStackedBarChartViewController.m */; };
 		5B9624421B38608C007763E2 /* NegativeStackedBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B9624401B38608C007763E2 /* NegativeStackedBarChartViewController.xib */; };
-		5BD47E5B1ABB0263008FCEC6 /* BalloonMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */; };
 		5BD47E601ABB3C91008FCEC6 /* LineChart2ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BD47E5E1ABB3C91008FCEC6 /* LineChart2ViewController.m */; };
 		5BD47E611ABB3C91008FCEC6 /* LineChart2ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BD47E5F1ABB3C91008FCEC6 /* LineChart2ViewController.xib */; };
 		5BD47E651ABB424E008FCEC6 /* BarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BD47E631ABB424E008FCEC6 /* BarChartViewController.m */; };
@@ -208,7 +208,6 @@
 		225B36361F6EB9FE0005B3D5 /* DateValueFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateValueFormatter.swift; sourceTree = "<group>"; };
 		225B36371F6EB9FE0005B3D5 /* LargeValueFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LargeValueFormatter.swift; sourceTree = "<group>"; };
 		225B363D1F6EBA180005B3D5 /* XYMarkerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XYMarkerView.swift; sourceTree = "<group>"; };
-		225B363E1F6EBA180005B3D5 /* BalloonMarker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalloonMarker.swift; sourceTree = "<group>"; };
 		225B363F1F6EBA180005B3D5 /* RadarMarkerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarMarkerView.swift; sourceTree = "<group>"; };
 		225B36441F6EBA410005B3D5 /* MultipleLinesChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleLinesChartViewController.swift; sourceTree = "<group>"; };
 		225B36451F6EBA410005B3D5 /* MultipleBarChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleBarChartViewController.swift; sourceTree = "<group>"; };
@@ -259,7 +258,7 @@
 		5B96243E1B38608C007763E2 /* NegativeStackedBarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NegativeStackedBarChartViewController.h; sourceTree = "<group>"; };
 		5B96243F1B38608C007763E2 /* NegativeStackedBarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NegativeStackedBarChartViewController.m; sourceTree = "<group>"; };
 		5B9624401B38608C007763E2 /* NegativeStackedBarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NegativeStackedBarChartViewController.xib; sourceTree = "<group>"; };
-		5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalloonMarker.swift; sourceTree = "<group>"; };
+		5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BalloonMarker.swift; path = "../../Objective-C/Components/BalloonMarker.swift"; sourceTree = "<group>"; };
 		5BD47E5C1ABB0273008FCEC6 /* ChartsDemo-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ChartsDemo-Bridging-Header.h"; sourceTree = "<group>"; };
 		5BD47E5D1ABB3C91008FCEC6 /* LineChart2ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineChart2ViewController.h; sourceTree = "<group>"; };
 		5BD47E5E1ABB3C91008FCEC6 /* LineChart2ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LineChart2ViewController.m; sourceTree = "<group>"; };
@@ -383,7 +382,7 @@
 		225B363C1F6EBA180005B3D5 /* Components */ = {
 			isa = PBXGroup;
 			children = (
-				225B363E1F6EBA180005B3D5 /* BalloonMarker.swift */,
+				5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */,
 				225B363F1F6EBA180005B3D5 /* RadarMarkerView.swift */,
 				225B363D1F6EBA180005B3D5 /* XYMarkerView.swift */,
 			);
@@ -530,7 +529,6 @@
 		5BD47E541ABB0177008FCEC6 /* Components */ = {
 			isa = PBXGroup;
 			children = (
-				5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */,
 				5B613DB21D526DED000F1E98 /* RadarMarkerView.swift */,
 				5B613DEF1D5A50B6000F1E98 /* XYMarkerView.swift */,
 			);
@@ -796,10 +794,10 @@
 				225B366A1F6EBA470005B3D5 /* CubicLineChartViewController.swift in Sources */,
 				225B36671F6EBA470005B3D5 /* PositiveNegativeBarChartViewController.swift in Sources */,
 				225B363A1F6EBA040005B3D5 /* DateValueFormatter.swift in Sources */,
+				5B442CD223D9B0A300B1F801 /* BalloonMarker.swift in Sources */,
 				225B366D1F6EBA470005B3D5 /* PiePolylineChartViewController.swift in Sources */,
 				225B366F1F6EBA470005B3D5 /* BarChartViewController.swift in Sources */,
 				225B36601F6EBA470005B3D5 /* LineChart2ViewController.swift in Sources */,
-				225B36411F6EBA1D0005B3D5 /* BalloonMarker.swift in Sources */,
 				225B366C1F6EBA470005B3D5 /* HorizontalBarChartViewController.swift in Sources */,
 				225B36401F6EBA1D0005B3D5 /* XYMarkerView.swift in Sources */,
 				225B36421F6EBA1D0005B3D5 /* RadarMarkerView.swift in Sources */,
@@ -836,6 +834,7 @@
 				5B57BBBB1A9B26AA0036A6CC /* DemoListViewController.m in Sources */,
 				5BD47E651ABB424E008FCEC6 /* BarChartViewController.m in Sources */,
 				5BDEDC471ABB871E007D3A60 /* CombinedChartViewController.m in Sources */,
+				5B442CD323D9B0AB00B1F801 /* BalloonMarker.swift in Sources */,
 				5BE377F21D47FDF1006EB34F /* IntAxisValueFormatter.m in Sources */,
 				5BD8F0741AB89CE500566E05 /* LineChart1ViewController.m in Sources */,
 				5BE377DE1D425151006EB34F /* DayAxisValueFormatter.m in Sources */,
@@ -845,7 +844,6 @@
 				5BEAED251ABC0BE20013F194 /* MultipleBarChartViewController.m in Sources */,
 				5B57BBB81A9B26AA0036A6CC /* AppDelegate.m in Sources */,
 				55E356511ADC638F00A57971 /* BubbleChartViewController.m in Sources */,
-				5BD47E5B1ABB0263008FCEC6 /* BalloonMarker.swift in Sources */,
 				5BEAED2C1ABC160F0013F194 /* CandleStickChartViewController.m in Sources */,
 				5BEAED271ABC0BE20013F194 /* MultipleLinesChartViewController.m in Sources */,
 				5BE6739A1D5BAD7E00A87BA2 /* DateValueFormatter.m in Sources */,

+ 0 - 209
ChartsDemo-iOS/Swift/Components/BalloonMarker.swift

@@ -1,209 +0,0 @@
-//
-//  BalloonMarker.swift
-//  ChartsDemo-Swift
-//
-//  Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda
-//  A port of MPAndroidChart for iOS
-//  Licensed under Apache License 2.0
-//
-//  https://github.com/danielgindi/Charts
-//
-
-import Foundation
-import Charts
-#if canImport(UIKit)
-    import UIKit
-#endif
-
-open class BalloonMarker: MarkerImage
-{
-    open var color: UIColor
-    open var arrowSize = CGSize(width: 15, height: 11)
-    open var font: UIFont
-    open var textColor: UIColor
-    open var insets: UIEdgeInsets
-    open var minimumSize = CGSize()
-    
-    fileprivate var label: String?
-    fileprivate var _labelSize: CGSize = CGSize()
-    fileprivate var _paragraphStyle: NSMutableParagraphStyle?
-    fileprivate var _drawAttributes = [NSAttributedString.Key : Any]()
-    
-    public init(color: UIColor, font: UIFont, textColor: UIColor, insets: UIEdgeInsets)
-    {
-        self.color = color
-        self.font = font
-        self.textColor = textColor
-        self.insets = insets
-        
-        _paragraphStyle = NSParagraphStyle.default.mutableCopy() as? NSMutableParagraphStyle
-        _paragraphStyle?.alignment = .center
-        super.init()
-    }
-    
-    open override func offsetForDrawing(atPoint point: CGPoint) -> CGPoint
-    {
-        var offset = self.offset
-        var size = self.size
-        
-        if size.width == 0.0 && image != nil
-        {
-            size.width = image!.size.width
-        }
-        if size.height == 0.0 && image != nil
-        {
-            size.height = image!.size.height
-        }
-        
-        let width = size.width
-        let height = size.height
-        let padding: CGFloat = 8.0
-
-        var origin = point
-        origin.x -= width / 2
-        origin.y -= height
-
-        if origin.x + offset.x < 0.0
-        {
-            offset.x = -origin.x + padding
-        }
-        else if let chart = chartView,
-            origin.x + width + offset.x > chart.bounds.size.width
-        {
-            offset.x = chart.bounds.size.width - origin.x - width - padding
-        }
-        
-        if origin.y + offset.y < 0
-        {
-            offset.y = height + padding;
-        }
-        else if let chart = chartView,
-            origin.y + height + offset.y > chart.bounds.size.height
-        {
-            offset.y = chart.bounds.size.height - origin.y - height - padding
-        }
-        
-        return offset
-    }
-    
-    open override func draw(context: CGContext, point: CGPoint)
-    {
-        guard let label = label else { return }
-        
-        let offset = self.offsetForDrawing(atPoint: point)
-        let size = self.size
-        
-        var rect = CGRect(
-            origin: CGPoint(
-                x: point.x + offset.x,
-                y: point.y + offset.y),
-            size: size)
-        rect.origin.x -= size.width / 2.0
-        rect.origin.y -= size.height
-        
-        context.saveGState()
-        
-        context.setFillColor(color.cgColor)
-
-        if offset.y > 0
-        {
-            context.beginPath()
-            context.move(to: CGPoint(
-                x: rect.origin.x,
-                y: rect.origin.y + arrowSize.height))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x + (rect.size.width - arrowSize.width) / 2.0,
-                y: rect.origin.y + arrowSize.height))
-            //arrow vertex
-            context.addLine(to: CGPoint(
-                x: point.x,
-                y: point.y))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x + (rect.size.width + arrowSize.width) / 2.0,
-                y: rect.origin.y + arrowSize.height))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x + rect.size.width,
-                y: rect.origin.y + arrowSize.height))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x + rect.size.width,
-                y: rect.origin.y + rect.size.height))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x,
-                y: rect.origin.y + rect.size.height))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x,
-                y: rect.origin.y + arrowSize.height))
-            context.fillPath()
-        }
-        else
-        {
-            context.beginPath()
-            context.move(to: CGPoint(
-                x: rect.origin.x,
-                y: rect.origin.y))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x + rect.size.width,
-                y: rect.origin.y))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x + rect.size.width,
-                y: rect.origin.y + rect.size.height - arrowSize.height))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x + (rect.size.width + arrowSize.width) / 2.0,
-                y: rect.origin.y + rect.size.height - arrowSize.height))
-            //arrow vertex
-            context.addLine(to: CGPoint(
-                x: point.x,
-                y: point.y))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x + (rect.size.width - arrowSize.width) / 2.0,
-                y: rect.origin.y + rect.size.height - arrowSize.height))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x,
-                y: rect.origin.y + rect.size.height - arrowSize.height))
-            context.addLine(to: CGPoint(
-                x: rect.origin.x,
-                y: rect.origin.y))
-            context.fillPath()
-        }
-
-        if offset.y > 0 {
-            rect.origin.y += self.insets.top + arrowSize.height
-        } else {
-            rect.origin.y += self.insets.top
-        }
-
-        rect.size.height -= self.insets.top + self.insets.bottom
-        
-        UIGraphicsPushContext(context)
-        
-        label.draw(in: rect, withAttributes: _drawAttributes)
-        
-        UIGraphicsPopContext()
-        
-        context.restoreGState()
-    }
-    
-    open override func refreshContent(entry: ChartDataEntry, highlight: Highlight)
-    {
-        setLabel(String(entry.y))
-    }
-    
-    open func setLabel(_ newLabel: String)
-    {
-        label = newLabel
-        
-        _drawAttributes.removeAll()
-        _drawAttributes[.font] = self.font
-        _drawAttributes[.paragraphStyle] = _paragraphStyle
-        _drawAttributes[.foregroundColor] = self.textColor
-        
-        _labelSize = label?.size(withAttributes: _drawAttributes) ?? CGSize.zero
-        
-        var size = CGSize()
-        size.width = _labelSize.width + self.insets.left + self.insets.right
-        size.height = _labelSize.height + self.insets.top + self.insets.bottom
-        size.width = max(minimumSize.width, size.width)
-        size.height = max(minimumSize.height, size.height)
-        self.size = size
-    }
-}