2016-09-08 1 views
-2

Я нахожусь здесь на своем пути, пытаясь понять, как заставить этот NSTimer работать. Вставка моего всего кода для ясности. Важная часть выделена жирным шрифтом.2.2 Запланированный таймер возвращается «Контроллер просмотра не имеет члена ...»

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) 

говорит об ошибке «Тип„ViewController“не имеет член„runTimedCode“

Когда я беру ViewController, я получаю другую ошибку: Использование локальная переменная 'runTimedCode' до ее объявления.

И, наконец, когда я перехожу к этой строке в нижней части кода, я получаю «Аргумент« #selector »относится к методу, который не подвергается Objective-C.

Я чувствую, что честно пробовал все, чтобы заставить этот таймер работать. Я посмотрел на каждый поток, который только можно вообразить. Есть ли у меня какое-то фундаментальное непонимание того, как работает таймер?

+0

Все были правы .. это было связано с размещением функции в рамках другой функции. Я действительно новичок в этом, поэтому я приношу свои извинения за такую ​​любительскую ошибку. Спасибо за помощь! –

ответ

0

Все правильно, вы определили свою функцию runTimedCode внутри своего viewDidLoad, так что это неправильный охват. Также вам следует избегать вложенных анимаций внутри блоков завершения. Попробуйте использовать код, который я подготовил для вас ниже.

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) 
    } 
} 
+0

Я ЛЮБЛЮ ТЕБЯ. Огромное спасибо. –

+0

Добро пожаловать! – Callam

4

Проблема в том, что вы положили func runTimedCode() {...}внутри другая функция, viewDidLoad. Вы не можете этого сделать. Поместите его на верхний уровень вашего контроллера.

2

Ваш контролер просмотра не имеет метода runTimedCode.

Вы объявляете его внутри функции viewDidLoad, вы должны переместить его снаружи.

Смежные вопросы