【问题标题】:Stuck: Analog Clock in Swift iOS卡住:Swift iOS 中的模拟时钟
【发布时间】:2015-06-14 01:06:13
【问题描述】:

我是 swift 新手(和一般编码),我一直在从事模拟手表项目。我已经到了一个我被卡住的地方。除非它们在函数“func setTime(){...}”之前到达,否则所有 println() 命令都不会向控制台输出任何内容。不知道那里发生了什么。而且我似乎无法用我找到的here 来旋转双手。我正在尝试将其从 obj-c 转换为 swift。 (我现在知道底部是非常错误的)我一直在搞乱它(底部)但我没有得到任何旋转。

任何帮助将不胜感激。我觉得我很接近了。

    var theTimer:NSTimer!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    println(viewDidLoad)

    func setTime(){

        println("set time")

        self.theTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "set time", userInfo: nil, repeats: false)

        let date = NSDate()
        let outputFormatter = NSDateFormatter()
        outputFormatter.dateFormat = "hh:mm:ss"
        let newDateString:NSString = outputFormatter.stringFromDate(date)
        println(newDateString)

        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond, fromDate: date)
        var hour = components.hour
        var minute = components.minute
        var second = components.second

        println(hour)
        println(minute)
        println(second)

        **var secAngle = (6 * second)
        var minAngle = (6 * minute)
        var hourAngle = (30 * hour + minute / 2)

        self.secsImage.transform = CGAffineTransformMakeRotation( CGFloat(secAngle) )
        self.minsImage.transform = CGAffineTransformMakeRotation( CGFloat(Double(minAngle)) )
        self.hoursImage.transform = CGAffineTransformMakeRotation( CGFloat(Double(hourAngle)) )**

        println(secAngle)
        println(minAngle)
        println(hourAngle)
}
}

【问题讨论】:

    标签: ios swift clock


    【解决方案1】:

    你已经声明了你的setTime 函数inside你的viewDidLoad 函数,但你从来没有调用过它。此外,NSTimer 的选择器不正确 - 它必须是函数的名称,并且必须是 Selector,而不仅仅是字符串。

    您应该将setTime 函数声明从viewDidLoad 中移出,我建议将其设置在viewWillAppear 中-

    var theTimer:NSTimer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        println(viewDidLoad)
    }
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
    
        self.setTime()
    
        self.theTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("setTime"), userInfo: nil, repeats: true)
    
    }
    
    func setTime(){
    
        println("set time")
        let date = NSDate()
        let outputFormatter = NSDateFormatter()
        outputFormatter.dateFormat = "hh:mm:ss"
        let newDateString:NSString = outputFormatter.stringFromDate(date)
        println(newDateString)
    
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond, fromDate: date)
        var hour = components.hour
        var minute = components.minute
        var second = components.second
    
        println(hour)
        println(minute)
        println(second)
    
        var secAngle = (6 * second)
        var minAngle = (6 * minute)
        var hourAngle = (30 * hour + minute / 2)
    
        self.secsImage.transform = CGAffineTransformMakeRotation( CGFloat(secAngle) )
        self.minsImage.transform = CGAffineTransformMakeRotation( CGFloat(Double(minAngle)) )
        self.hoursImage.transform = CGAffineTransformMakeRotation( CGFloat(Double(hourAngle)) )**
    
        println(secAngle)
        println(minAngle)
        println(hourAngle)
    }
    

    如果您是编程新手,您可能需要考虑浏览网络上的一些基本编码教程。

    【讨论】:

      猜你喜欢
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      相关资源
      最近更新 更多