Skip to content

Commit

Permalink
添加mark改动
Browse files Browse the repository at this point in the history
  • Loading branch information
FreddyZeng committed Dec 1, 2017
1 parent 12a76c3 commit 3be39da
Showing 1 changed file with 93 additions and 25 deletions.
118 changes: 93 additions & 25 deletions ChartsDemo/Classes/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

0 comments on commit 3be39da

Please sign in to comment.