首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调试代码::如何在CGContext中着色行?

调试代码::如何在CGContext中着色行?
EN

Stack Overflow用户
提问于 2015-05-07 17:45:18
回答 1查看 308关注 0票数 0

下面的代码有一个问题,由于某种原因,当在UIColor.yellowColor()中绘制径向线时,它们是黑色的。

代码语言:javascript
运行
复制
import UIKit
import QuartzCore


let π:CGFloat = CGFloat(M_PI)

class CircularPlotView:UIView {

  var lineWidth:CGFloat = 1.5 { didSet { setNeedsDisplay() } }
  var edgeColor:UIColor = UIColor.yellowColor() { didSet { setNeedsDisplay() } }
  var fillColor:UIColor = UIColor.orangeColor() { didSet { setNeedsDisplay() } }
  var fieldColor:UIColor = UIColor.yellowColor(){ didSet { setNeedsDisplay() } }
  var lineColor:UIColor = UIColor.blueColor(){ didSet { setNeedsDisplay() } }
  var scale: CGFloat = 0.90 { didSet { setNeedsDisplay() } }
  //var plotCenter:CGPoint { return convertPoint(center, fromView: superview) }
  var plotCenter:CGPoint {return CGPoint(x: 190,y: 316) }
  var plotRadius:CGFloat {return min(bounds.size.width, bounds.size.height) / 8 * scale }
  var diameterX:CGFloat = 100.0
  var radiusX:CGFloat {return diameterX * 0.5}
  var scaleFactorDB:CGFloat = 5.0
  var offsetDB:CGFloat = 0.0

  //data to plot
  var dataString:[String] = ["cat","dog","pizza"]
  var dataDB:[Float] = [11.0,9.0,3.5]

  var fontSize:CGFloat = 17.0

  override func drawRect(rect: CGRect) {

    let context = UIGraphicsGetCurrentContext()

    let fieldFont = UIFont.systemFontOfSize(fontSize)

    let paragraphStyle:NSMutableParagraphStyle = NSMutableParagraphStyle.alloc()
    paragraphStyle.lineHeightMultiple = 1
    paragraphStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping

    let attributes:Dictionary = [
      NSParagraphStyleAttributeName : paragraphStyle,
      NSForegroundColorAttributeName: fieldColor,
      NSFontAttributeName: fieldFont
    ]


    var theta:CGFloat = 1.5 * π //CGFloat(M_PI)
    var radius:CGFloat = 0.0
    //var s:NSString = "ERROR FIX DATABASE" //if shown error in DB

    let startTime = CFAbsoluteTimeGetCurrent()

    //MARK:== draw strings ==
    //with enough separation so they don't clobber each other
    var myAttributedString:NSMutableAttributedString!

    for (var i=0; i < dataDB.count; i++)
    {
      //s = NSString(string: dataString[i])
      myAttributedString = NSMutableAttributedString (string: dataString[i], attributes:attributes)

      theta =  1.97 * π * ( CGFloat(i) / (CGFloat(dataDB.count) ) )
      radius =  ( radiusX + 10.0 +  offsetDB + scaleFactorDB*CGFloat(dataDB.reduce(dataDB[0], { max($0, $1) })) )

      CGContextSaveGState(context)
      CGContextTranslateCTM(context,plotCenter.x ,plotCenter.y )
      CGContextRotateCTM(context, theta)
     CGContextSetStrokeColorWithColor(context,UIColor.yellowColor().CGColor)
      CGContextMoveToPoint(context,0.0,0.0)
      CGContextAddLineToPoint(context, radiusX + scaleFactorDB*CGFloat(dataDB[i]) + offsetDB, 0.0 )
      myAttributedString.drawAtPoint(CGPoint(x: radius , y: 0 ))
      CGContextRestoreGState(context)
    }

    let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
    println("Time elapsed loop through lines and strings: \(timeElapsed) s")

    CGContextStrokePath(context)

    //MARK:== draw oval, fill, edge ==
    let sunPath = UIBezierPath(ovalInRect: CGRectMake(
      plotCenter.x - radiusX,
      plotCenter.y - radiusX,
      diameterX, diameterX)
    )

    sunPath.lineWidth = lineWidth

    edgeColor.set()
    sunPath.stroke()

    fillColor.setFill()
    sunPath.fill()

  }
EN

Stack Overflow用户

回答已采纳

发布于 2015-05-07 18:59:29

曾经是

代码语言:javascript
运行
复制
  CGContextSaveGState(context)
  CGContextTranslateCTM(context,plotCenter.x ,plotCenter.y )
  CGContextRotateCTM(context, theta)
  CGContextMoveToPoint(context,0.0,0.0)
  CGContextAddLineToPoint(context, radiusX + scaleFactorDB*CGFloat(dataDB[i]) + offsetDB, 0.0 )
  myAttributedString.drawAtPoint(CGPoint(x: radius , y: 0 ))
  CGContextRestoreGState(context)

已更正

代码语言:javascript
运行
复制
  CGContextSaveGState(context)
  CGContextTranslateCTM(context,plotCenter.x ,plotCenter.y )
  CGContextRotateCTM(context, theta)
  CGContextSetStrokeColorWithColor(context,lineColor.CGColor)
  CGContextMoveToPoint(context,0.0,0.0)
  CGContextAddLineToPoint(context, radiusX + scaleFactorDB*CGFloat(dataDB[i]) + offsetDB, 0.0 )
  CGContextStrokePath(context)
  myAttributedString.drawAtPoint(CGPoint(x: radius , y: 0 ))
  CGContextRestoreGState(context)
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30108230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档