2.2 定时器返回"View Controller has No Member..."



我在我的智慧结束这里试图弄清楚如何让这个ntimer工作。为了清晰起见,粘贴我的全部代码。

import UIKit
import QuartzCore
import Foundation
class ViewController: UIViewController {
@IBOutlet weak var outerCircle: UIImageView!
@IBOutlet weak var innerCircle: UIImageView!
@IBOutlet weak var instructionLabel: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    var timer: NSTimer!

    timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: #selector(ViewController.runTimedCode), userInfo: nil, repeats: true)

    func runTimedCode() {

        UIView.animateWithDuration(5, delay:0, options:[], animations: {
            //Inhale
            self.innerCircle.transform = CGAffineTransformMakeScale(3.5, 3.5)
            self.instructionLabel.text = "Inhale"
            }, completion: { finish in
                //Exhale
                UIView.animateWithDuration(5, delay:0, options:[], animations: {
                    self.innerCircle.transform = CGAffineTransformMakeScale(1, 1)
                    self.instructionLabel.text = "Exhale"
                    }, completion: nil)
        })
    }

}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }

}

我想要什么是在"runTimedCode()"每10秒运行一次。我目前得到一个错误:

timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: #selector(ViewController.runTimedCode), userInfo: nil, repeats: true)

错误提示"Type 'ViewController'没有成员'runTimedCode'.

当我取ViewController。出,我得到一个不同的错误:在声明之前使用局部变量'runTimedCode'。

最后,当我将这行移动到代码的底部时,我得到"'#selector'的参数指的是一个不暴露于Objective-C的方法。

我觉得我已经诚实地尝试了一切让这个计时器工作。我看过所有能想到的线索。我对计时器的功能有什么基本的误解吗?

问题是您将func runTimedCode() {...} 放在另一个函数viewDidLoad中。你不能这么做。把它放在视图控制器的顶层

你的视图控制器没有runTimedCode方法

你在viewDidLoad函数中声明它,你应该把它移到外面

每个人都是对的,你在viewDidLoad内定义了runTimedCode函数,所以它在错误的范围内。另外,你应该避免在完成块中嵌套动画。尝试使用下面我为您准备的代码。

import Foundation
class ViewController: UIViewController {
    // MARK: Outlets
    @IBOutlet weak var outerCircle: UIImageView!
    @IBOutlet weak var innerCircle: UIImageView!
    @IBOutlet weak var instructionLabel: UILabel!
    // MARK: Properties
    var timer: NSTimer?
    // MARK: Lifecycle
    override func viewDidLoad() {
        super.viewDidLoad()
        timer = NSTimer.scheduledTimerWithTimeInterval(5,
            target: self,
            selector: #selector(timerDidFinish),
            userInfo: nil,
            repeats: true
        )
    }
    // MARK: NSTimer
    func timerDidFinish() {
        UIView.animateWithDuration(5, delay: 0, options: [.Autoreverse], animations: {
            self.innerCircle.transform = CGAffineTransformMakeScale(3.5, 3.5)
            self.instructionLabel.text = "Inhale"
        }, completion: nil)
    }
}

相关内容

最新更新