【发布时间】:2015-05-06 22:34:19
【问题描述】:
我的应用功能如下:
一天中的时间从 NSDate 中提取,并在我的 ViewController.swift 中的 updateTime 函数中分成组件:
import UIKit
import Foundation
class ViewController: UIViewController {
func updateTime() {
var date:NSDate = NSDate()
var calendar:NSCalendar = NSCalendar.currentCalendar()
var components:NSDateComponents = calendar.components(NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitMinute | NSCalendarUnit.CalendarUnitSecond, fromDate: date)
var hour = components.hour
var minute = components.minute
var seconds = components.second
var time = "\(hour) : \(minute) : \(seconds)"
println("\(hour)")
}
override func viewDidLoad() {
super.viewDidLoad()
var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
在 viewDidLoad 上,计时器开始,调用函数 updateTime() 来拉取 NSDate 并将其分成小时、分钟和秒部分。
使用应用程序 PaintCode 创建 Core Graphics 绘制方法,然后我创建了一个钟面,它绘制了 12 个单独的圆圈 - 最初的 12 个圆圈是 EMPTY 绘图。使用 NSDate 小时组件,我的系统试图确定需要用核心图形填充的 12 个空圆圈中有多少。使用计时器,我希望每秒更新此数据,以使核心图形绘制小时 UIView 指示器在用户在其屏幕上打开应用程序时保持最新。稍后我将对分钟和秒做同样的事情。
在我的应用程序设计中,每个小时、分钟和秒都会绘制一个额外的图形。我的想法(我可能想多了)导致我使用枚举根据 NSDate 报告的小时数绘制每个小时的圆圈,并携带该“HH”值以与订购绘图的个别情况相对应。分钟和秒刻度标记也是如此。
下面的这段代码 sn-p 来自我称之为 ClockFace01 的 UIView 文件,View Controller 中的 UIView 归入该文件。在函数 drawCanvas 中,我试图每秒从 updateTime() 函数的 component.hour 中获取一个整数变量,并以某种方式更新 drawRect 方法以使 UIView 时钟面保持最新。
import UIKit
@IBDesignable
class ClockFace01: UIView {
func updateTime() {
func drawCanvas(canvas:Int) {
switch canvas {
case 00:
//// EMPTY1 Drawing
var eMPTY1Path = UIBezierPath(ovalInRect: CGRectMake(127, 49.47, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY1Path.lineWidth = 1
eMPTY1Path.stroke()
//// EMPTY2 Drawing
var eMPTY2Path = UIBezierPath(ovalInRect: CGRectMake(149.51, 71.98, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY2Path.lineWidth = 1
eMPTY2Path.stroke()
//// EMPTY3 Drawing
var eMPTY3Path = UIBezierPath(ovalInRect: CGRectMake(157.75, 102.73, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY3Path.lineWidth = 1
eMPTY3Path.stroke()
//// EMPTY4 Drawing
var eMPTY4Path = UIBezierPath(ovalInRect: CGRectMake(149.51, 133.48, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY4Path.lineWidth = 1
eMPTY4Path.stroke()
//// EMPTY5 Drawing
var eMPTY5Path = UIBezierPath(ovalInRect: CGRectMake(127, 155.99, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY5Path.lineWidth = 1
eMPTY5Path.stroke()
//// EMPTY6 Drawing
var eMPTY6Path = UIBezierPath(ovalInRect: CGRectMake(96.25, 164.23, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY6Path.lineWidth = 1
eMPTY6Path.stroke()
//// EMPTY7 Drawing
var eMPTY7Path = UIBezierPath(ovalInRect: CGRectMake(65.5, 155.99, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY7Path.lineWidth = 1
eMPTY7Path.stroke()
//// EMPTY8 Drawing
var eMPTY8Path = UIBezierPath(ovalInRect: CGRectMake(42.99, 133.48, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY8Path.lineWidth = 1
eMPTY8Path.stroke()
//// EMPTY9 Drawing
var eMPTY9Path = UIBezierPath(ovalInRect: CGRectMake(34.75, 102.73, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY9Path.lineWidth = 1
eMPTY9Path.stroke()
//// EMPTY10 Drawing
var eMPTY10Path = UIBezierPath(ovalInRect: CGRectMake(42.99, 71.98, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY10Path.lineWidth = 1
eMPTY10Path.stroke()
//// EMPTY11 Drawing
var eMPTY11Path = UIBezierPath(ovalInRect: CGRectMake(65.5, 49.47, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY11Path.lineWidth = 1
eMPTY11Path.stroke()
//// EMPTY12 Drawing
var eMPTY12Path = UIBezierPath(ovalInRect: CGRectMake(96.25, 41.23, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY12Path.lineWidth = 1
eMPTY12Path.stroke()
case 01, 13:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR1 Drawing
var hOUR1Path = UIBezierPath(ovalInRect: CGRectMake(127, 49.47, 24, 24))
color0.setFill()
hOUR1Path.fill()
case 02, 14:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR2 Drawing
var hOUR2Path = UIBezierPath(ovalInRect: CGRectMake(149.51, 71.98, 24, 24))
color0.setFill()
hOUR2Path.fill()
case 03, 15:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR3 Drawing
var hOUR3Path = UIBezierPath(ovalInRect: CGRectMake(157.75, 102.73, 24, 24))
color0.setFill()
hOUR3Path.fill()
case 04, 16:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR4 Drawing
var hOUR4Path = UIBezierPath(ovalInRect: CGRectMake(149.51, 133.48, 24, 24))
color0.setFill()
hOUR4Path.fill()
case 05, 17:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR5 Drawing
var hOUR5Path = UIBezierPath(ovalInRect: CGRectMake(127, 155.99, 24, 24))
color0.setFill()
hOUR5Path.fill()
case 06, 18:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR6 Drawing
var hOUR6Path = UIBezierPath(ovalInRect: CGRectMake(96.25, 164.23, 24, 24))
color0.setFill()
hOUR6Path.fill()
case 07, 19:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR7 Drawing
var hOUR7Path = UIBezierPath(ovalInRect: CGRectMake(65.5, 155.99, 24, 24))
color0.setFill()
hOUR7Path.fill()
case 08, 20:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR8 Drawing
var hOUR8Path = UIBezierPath(ovalInRect: CGRectMake(42.99, 133.48, 24, 24))
color0.setFill()
hOUR8Path.fill()
case 09, 21:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR9 Drawing
var hOUR9Path = UIBezierPath(ovalInRect: CGRectMake(34.75, 102.73, 24, 24))
color0.setFill()
hOUR9Path.fill()
case 10, 22:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR10 Drawing
var hOUR10Path = UIBezierPath(ovalInRect: CGRectMake(42.99, 71.98, 24, 24))
color0.setFill()
hOUR10Path.fill()
case 11, 23:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR11 Drawing
var hOUR11Path = UIBezierPath(ovalInRect: CGRectMake(65.5, 49.47, 24, 24))
color0.setFill()
hOUR11Path.fill()
case 12, 24:
//// Color Declarations
let color0 = UIColor(red: 0.894, green: 0.000, blue: 0.476, alpha: 1.000)
//// HOUR12 Drawing
var hOUR12Path = UIBezierPath(ovalInRect: CGRectMake(96.25, 41.23, 24, 24))
color0.setFill()
hOUR12Path.fill()
default:
//// EMPTY12 Drawing
var eMPTY12Path = UIBezierPath(ovalInRect: CGRectMake(96.25, 41.23, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY12Path.lineWidth = 1
eMPTY12Path.stroke()
}
}
var date:NSDate = NSDate()
var calendar:NSCalendar = NSCalendar.currentCalendar()
var components:NSDateComponents = calendar.components(NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitMinute | NSCalendarUnit.CalendarUnitSecond, fromDate: date)
var hour = components.hour
var minute = components.minute
var seconds = components.second
var time = "\(hour) : \(minute) : \(seconds)"
println("\(hour)")
}
override func drawRect(rect: CGRect) {
var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true)
//// EMPTY12 Drawing
var eMPTY12Path = UIBezierPath(ovalInRect: CGRectMake(96.25, 41.23, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY12Path.lineWidth = 1
eMPTY12Path.stroke()
//// EMPTY1 Drawing
var eMPTY1Path = UIBezierPath(ovalInRect: CGRectMake(127, 49.47, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY1Path.lineWidth = 1
eMPTY1Path.stroke()
//// EMPTY2 Drawing
var eMPTY2Path = UIBezierPath(ovalInRect: CGRectMake(149.51, 71.98, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY2Path.lineWidth = 1
eMPTY2Path.stroke()
//// EMPTY3 Drawing
var eMPTY3Path = UIBezierPath(ovalInRect: CGRectMake(157.75, 102.73, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY3Path.lineWidth = 1
eMPTY3Path.stroke()
//// EMPTY4 Drawing
var eMPTY4Path = UIBezierPath(ovalInRect: CGRectMake(149.51, 133.48, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY4Path.lineWidth = 1
eMPTY4Path.stroke()
//// EMPTY5 Drawing
var eMPTY5Path = UIBezierPath(ovalInRect: CGRectMake(127, 155.99, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY5Path.lineWidth = 1
eMPTY5Path.stroke()
//// EMPTY6 Drawing
var eMPTY6Path = UIBezierPath(ovalInRect: CGRectMake(96.25, 164.23, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY6Path.lineWidth = 1
eMPTY6Path.stroke()
//// EMPTY7 Drawing
var eMPTY7Path = UIBezierPath(ovalInRect: CGRectMake(65.5, 155.99, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY7Path.lineWidth = 1
eMPTY7Path.stroke()
//// EMPTY8 Drawing
var eMPTY8Path = UIBezierPath(ovalInRect: CGRectMake(42.99, 133.48, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY8Path.lineWidth = 1
eMPTY8Path.stroke()
//// EMPTY9 Drawing
var eMPTY9Path = UIBezierPath(ovalInRect: CGRectMake(34.75, 102.73, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY9Path.lineWidth = 1
eMPTY9Path.stroke()
//// EMPTY10 Drawing
var eMPTY10Path = UIBezierPath(ovalInRect: CGRectMake(42.99, 71.98, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY10Path.lineWidth = 1
eMPTY10Path.stroke()
//// EMPTY11 Drawing
var eMPTY11Path = UIBezierPath(ovalInRect: CGRectMake(65.5, 49.47, 24, 24))
ClockStyleKit.color1.setStroke()
eMPTY11Path.lineWidth = 1
eMPTY11Path.stroke()
}
在上面
【问题讨论】:
-
你的程序“不喜欢那样”是什么意思?您是否收到编译器错误?崩溃?或者它只是没有像您期望的那样绘制?
-
第二次@Cadin 的评论:您确实需要提供更多信息。究竟发生了什么或没有发生什么不应该/不应该发生?
标签: ios swift cocoa-touch uiview