Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
* develop:
  Demo接入 TYMark
  NSUIColor
  添加mark改动
  bugfix
  添加极限线之间的颜色
  添加 自定义Mark
  • Loading branch information
FreddyZeng committed Dec 1, 2017
2 parents a5adf86 + 6cac021 commit 42347c4
Show file tree
Hide file tree
Showing 11 changed files with 180 additions and 32 deletions.
4 changes: 4 additions & 0 deletions ChartsDemo/ChartsDemo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@
5BEAED3C1ABC199F0013F194 /* ColoredLineChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED3A1ABC199F0013F194 /* ColoredLineChartViewController.xib */; };
5BEAED401ABC1AC60013F194 /* SinusBarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED3E1ABC1AC60013F194 /* SinusBarChartViewController.m */; };
5BEAED411ABC1AC60013F194 /* SinusBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED3F1ABC1AC60013F194 /* SinusBarChartViewController.xib */; };
C28C102E1FD0E261002AE56B /* TYMarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28C102C1FD0E261002AE56B /* TYMarkerView.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -234,6 +235,7 @@
5BEAED3D1ABC1AC60013F194 /* SinusBarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SinusBarChartViewController.h; sourceTree = "<group>"; };
5BEAED3E1ABC1AC60013F194 /* SinusBarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SinusBarChartViewController.m; sourceTree = "<group>"; };
5BEAED3F1ABC1AC60013F194 /* SinusBarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SinusBarChartViewController.xib; sourceTree = "<group>"; };
C28C102C1FD0E261002AE56B /* TYMarkerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TYMarkerView.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -352,6 +354,7 @@
isa = PBXGroup;
children = (
5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */,
C28C102C1FD0E261002AE56B /* TYMarkerView.swift */,
5B613DB21D526DED000F1E98 /* RadarMarkerView.swift */,
5B613DB41D526EA8000F1E98 /* RadarMarkerView.xib */,
5B613DEF1D5A50B6000F1E98 /* XYMarkerView.swift */,
Expand Down Expand Up @@ -616,6 +619,7 @@
5BE673941D5B4E0900A87BA2 /* LineChartTimeViewController.m in Sources */,
5B613DF01D5A50B6000F1E98 /* XYMarkerView.swift in Sources */,
5BEAED3B1ABC199F0013F194 /* ColoredLineChartViewController.m in Sources */,
C28C102E1FD0E261002AE56B /* TYMarkerView.swift in Sources */,
5BDEDC411ABB7F73007D3A60 /* HorizontalBarChartViewController.m in Sources */,
5BEAED121ABBFB2B0013F194 /* AnotherBarChartViewController.m in Sources */,
5BEAED311ABC18F00013F194 /* CubicLineChartViewController.m in Sources */,
Expand Down
44 changes: 44 additions & 0 deletions ChartsDemo/Classes/Components/TYMarkerView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
//
// SleepMarkerView.swift
// Meum
//
// Created by fanrong on 2017/11/29.
// Copyright © 2017年 huangwei. All rights reserved.
//

//
// XYMarkerView.swift
// ChartsDemo
// Copyright © 2016 dcg. All rights reserved.
//

import Foundation
import Charts


@objc protocol TYMarkerViewDelegate {
@objc func tyMarkerViewRefreshContentAttString(mark:TYMarkerView, entry: ChartDataEntry, highlight: Highlight) -> NSAttributedString
}

open class TYMarkerView: BalloonMarker
{
@objc weak var delegate: TYMarkerViewDelegate?

fileprivate var yFormatter = NumberFormatter()

@objc public override init(color: UIColor, font: UIFont, textColor: UIColor, insets: UIEdgeInsets)
{
super.init(color: color, font: font, textColor: textColor, insets: insets)
yFormatter.minimumFractionDigits = 0
yFormatter.maximumFractionDigits = 0
}

open override func refreshContent(entry: ChartDataEntry, highlight: Highlight)
{
if let delegate = delegate {
let attString = delegate.tyMarkerViewRefreshContentAttString(mark: self, entry: entry, highlight: highlight)
setAttLabel(attString);
}
}
}

118 changes: 93 additions & 25 deletions ChartsDemo/Objective-C/Components/BalloonMarker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ open class BalloonMarker: MarkerImage
@objc open var insets = UIEdgeInsets()
@objc open var minimumSize = CGSize()

fileprivate var attLabel: NSAttributedString?
fileprivate var label: String?
fileprivate var _labelSize: CGSize = CGSize()
fileprivate var _paragraphStyle: NSMutableParagraphStyle?
Expand Down Expand Up @@ -49,10 +50,7 @@ open class BalloonMarker: MarkerImage
return super.offsetForDrawing(atPoint: point)
}

open override func draw(context: CGContext, point: CGPoint)
{
guard let label = label else { return }

func drawLabel(context: CGContext, point: CGPoint, label: String) {
let offset = self.offsetForDrawing(atPoint: point)
let size = self.size

Expand All @@ -66,54 +64,124 @@ open class BalloonMarker: MarkerImage

context.saveGState()

if label.count == 0 {
context.restoreGState()
return;
}

if let color = color
{
context.setFillColor(color.cgColor)
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,

let path = UIBezierPath.init(roundedRect: CGRect(x: rect.origin.x, y: rect.origin.y, width: rect.size.width, height: rect.size.height - arrowSize.height), cornerRadius: 5);

let sanJiao = UIBezierPath();
sanJiao.move(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(
sanJiao.addLine(to: CGPoint(
x: rect.origin.x + rect.size.width / 2.0,
y: rect.origin.y + rect.size.height))
context.addLine(to: CGPoint(
sanJiao.addLine(to: CGPoint(
x: rect.origin.x + (rect.size.width + arrowSize.width) / 2.0,
y: rect.origin.y + rect.size.height - arrowSize.height))
path.append(sanJiao)
path.fill()
}

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()
}

func drawAttLabel(context: CGContext, point: CGPoint, label: NSAttributedString) {

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()

if label.string.count == 0 {
context.restoreGState()
return;
}

if let color = color
{
context.setFillColor(color.cgColor)

let path = UIBezierPath.init(roundedRect: CGRect(x: rect.origin.x, y: rect.origin.y, width: rect.size.width, height: rect.size.height - arrowSize.height), cornerRadius: 5);

let sanJiao = UIBezierPath();
sanJiao.move(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,
sanJiao.addLine(to: CGPoint(
x: rect.origin.x + rect.size.width / 2.0,
y: rect.origin.y + rect.size.height))
sanJiao.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))
context.fillPath()
path.append(sanJiao)
path.fill()
}

rect.origin.y += self.insets.top
rect.origin.x += self.insets.left
rect.size.width -= self.insets.left + self.insets.right
rect.size.height -= self.insets.top + self.insets.bottom

UIGraphicsPushContext(context)

label.draw(in: rect, withAttributes: _drawAttributes)
label.draw(in: rect)

UIGraphicsPopContext()

context.restoreGState()
}

open override func draw(context: CGContext, point: CGPoint)
{
if let attLabel = attLabel,attLabel.string.count > 0 {
drawAttLabel(context: context, point: point, label: attLabel)
}else if let label = label,label.count > 0 {
drawLabel(context: context, point: point, label: label)
}
}

open override func refreshContent(entry: ChartDataEntry, highlight: Highlight)
{
setLabel(String(entry.y))
}

@objc open func setAttLabel(_ newAttLabel: NSAttributedString)
{
attLabel = newAttLabel
_labelSize = newAttLabel.size()

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
}

@objc open func setLabel(_ newLabel: String)
{
label = newLabel
Expand Down
12 changes: 11 additions & 1 deletion ChartsDemo/Objective-C/Demos/CombinedChartViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

#define ITEM_COUNT 12

@interface CombinedChartViewController () <ChartViewDelegate, IChartAxisValueFormatter>
@interface CombinedChartViewController () <ChartViewDelegate, IChartAxisValueFormatter,TYMarkerViewDelegate>
{
NSArray<NSString *> *months;
}
Expand Down Expand Up @@ -84,9 +84,19 @@ - (void)viewDidLoad
xAxis.granularity = 1.0;
xAxis.valueFormatter = self;

TYMarkerView *marker = [[TYMarkerView alloc] initWithColor:[UIColor blueColor] font:[UIFont systemFontOfSize:14] textColor:[UIColor redColor] insets:UIEdgeInsetsMake(15, 4, 10, 4)];
marker.delegate = self;
marker.chartView = _chartView;
_chartView.marker = marker;

[self updateChartData];
}

- (NSAttributedString *)tyMarkerViewRefreshContentAttStringWithMark:(TYMarkerView *)mark entry:(ChartDataEntry *)entry highlight:(ChartHighlight *)highlight {
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%li",(long)entry.y]];
return attString;
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
Expand Down
2 changes: 2 additions & 0 deletions ChartsDemo/Objective-C/Demos/LineChart1ViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,14 @@ - (void)viewDidLoad
ll1.lineDashLengths = @[@5.f, @5.f];
ll1.labelPosition = ChartLimitLabelPositionRightTop;
ll1.valueFont = [UIFont systemFontOfSize:10.0];
ll1.lineBottomSpaceColor = [UIColor blueColor];

ChartLimitLine *ll2 = [[ChartLimitLine alloc] initWithLimit:-30.0 label:@"Lower Limit"];
ll2.lineWidth = 4.0;
ll2.lineDashLengths = @[@5.f, @5.f];
ll2.labelPosition = ChartLimitLabelPositionRightBottom;
ll2.valueFont = [UIFont systemFontOfSize:10.0];
ll2.lineBottomSpaceColor = [UIColor greenColor];

ChartYAxis *leftAxis = _chartView.leftAxis;
[leftAxis removeAllLimitLines];
Expand Down
2 changes: 2 additions & 0 deletions Source/Charts/Components/ChartLimitLine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ open class ChartLimitLine: ComponentBase
@objc open var lineColor = NSUIColor(red: 237.0/255.0, green: 91.0/255.0, blue: 91.0/255.0, alpha: 1.0)
@objc open var lineDashPhase = CGFloat(0.0)
@objc open var lineDashLengths: [CGFloat]?
/// 线下面的颜色
@objc open var lineBottomSpaceColor = NSUIColor.black

@objc open var valueTextColor = NSUIColor.black
@objc open var valueFont = NSUIFont.systemFont(ofSize: 13.0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ open class BarChartDataEntry: ChartDataEntry
}

/// 设置柱状图的线性渐变色
@objc public var linearGradientColors = [UIColor]()
@objc public var linearGradientColors = [NSUIColor]()

/// Constructor for normal bars (not stacked).
public override init(x: Double, y: Double)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ open class LineChartDataSet: LineRadarChartDataSet, ILineChartDataSet
/// **default**: Linear
open var mode: Mode = Mode.linear

@objc open var highlightHollowFillColor: UIColor = UIColor.clear
@objc open var highlightHollowFillColor: NSUIColor = NSUIColor.clear

fileprivate var _cubicIntensity = CGFloat(0.2)

Expand Down
2 changes: 1 addition & 1 deletion Source/Charts/Highlight/BarHighlighter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ open class BarHighlighter: ChartHighlighter
{
let stackIndex = getClosestStackIndex(ranges: ranges, value: yValue)

if set.colors[stackIndex] == UIColor.clear {
if set.colors[stackIndex] == NSUIColor.clear {
return nil;
}

Expand Down
6 changes: 3 additions & 3 deletions Source/Charts/Renderers/BarChartRenderer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ open class BarChartRenderer: BarLineScatterCandleBubbleRenderer
var rects = [CGRect]()
var stackBarTopRectsIndex = [Int]()
var stackBarBottomRectsIndex = [Int]()
var rectsLinearGradientColors = [[UIColor]]()
var rectsLinearGradientColors = [[NSUIColor]]()
}

@objc open weak var dataProvider: BarChartDataProvider?
Expand Down Expand Up @@ -226,7 +226,7 @@ open class BarChartRenderer: BarLineScatterCandleBubbleRenderer
}
}

fileprivate func drawLinearGradientColor(context: CGContext, rect: CGRect, rectCorner: UIRectCorner?, colors: [UIColor]) {
fileprivate func drawLinearGradientColor(context: CGContext, rect: CGRect, rectCorner: UIRectCorner?, colors: [NSUIColor]) {
context.saveGState()

var path = UIBezierPath.init(rect: rect)
Expand Down Expand Up @@ -392,7 +392,7 @@ open class BarChartRenderer: BarLineScatterCandleBubbleRenderer
{
// Set the color for the currently drawn value. If the index is out of bounds, reuse colors.
let color = dataSet.color(atIndex: j)
if color == UIColor.clear {
if color == NSUIColor.clear {
continue
}
context.setFillColor(color.cgColor)
Expand Down
18 changes: 18 additions & 0 deletions Source/Charts/Renderers/YAxisRenderer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,10 @@ open class YAxisRenderer: AxisRendererBase
else { return }

var limitLines = yAxis.limitLines
// 从小到大排序lines
limitLines = limitLines.sorted(by: { (left, right) -> Bool in
return left.limit < right.limit
})

if limitLines.count == 0
{
Expand All @@ -307,6 +311,7 @@ open class YAxisRenderer: AxisRendererBase
let trans = transformer.valueToPixelMatrix

var position = CGPoint(x: 0.0, y: 0.0)
var bottomSpacePosition = CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentHeight)// 上次渲染的line位置

for i in 0 ..< limitLines.count
{
Expand Down Expand Up @@ -346,6 +351,19 @@ open class YAxisRenderer: AxisRendererBase

context.strokePath()

context.beginPath()
// 绘制线下面的区域颜色,从小到大进行渲染颜色
context.setFillColor(l.lineBottomSpaceColor.cgColor)
context.setStrokeColor(NSUIColor.clear.cgColor)

context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: position.y))
context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: position.y))
context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: bottomSpacePosition.y))
context.addLine(to: CGPoint(x: viewPortHandler.contentLeft, y: bottomSpacePosition.y))
bottomSpacePosition = CGPoint(x: position.x, y: position.y - l.lineWidth/2.0)

context.fillPath()

let label = l.label

// if drawing the limit-value label is enabled
Expand Down

0 comments on commit 42347c4

Please sign in to comment.