Я получил основной V C под названием "ViewController.swift", который связан с моей сценой ViewController в Main.storyboard. Затем я хочу другой экран, который показывает, когда выполняется условие в моем ViewController.swift. Поэтому я получил Gameover.storyboard, который имеет сцену V C с идентификатором Storyboard "overID", а также "GameoverViewController.swift" для обработки сцены GameOver.
Вот мой код в ViewController.swift, который должен открыть Gameover.storyboards V C Сцена, когда выполнено условие, которое вы видите ниже:
import UIKit
class ViewController: UIViewController {
var wantedLiter = 10.00
var timer : Timer?
var actualLiter = 0.00
var timerReset = true
var preisProLiter = 1.26
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
let storyBoard: UIStoryboard = UIStoryboard(name: "Gameover", bundle: nil)
let gameoverViewController = storyBoard.instantiateViewController(withIdentifier: "overID") as! GameoverViewController
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@IBOutlet weak var preisliterLabel: UILabel!
@IBOutlet weak var euroLabel: UILabel!
@IBOutlet weak var numberLabel: UILabel!
@IBOutlet weak var numberButton: UIButton!
@IBOutlet weak var confirmButton: UIButton!
@IBAction func confirm(_ sender: Any) {
}
override func viewDidLoad() {
super.viewDidLoad()
numberLabel.text = String(round(1000*actualLiter)/1000) //initial value
preisliterLabel.text = String(preisProLiter)
// Do any additional setup after loading the view.
}
@IBAction func holdingTheButton(_ sender: Any) {
print("I am holding")
timerReset = false // reset to false since you are holding the button
guard timer == nil else { return }
timer = Timer.scheduledTimer(timeInterval: 0.005, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
}
@IBAction func buttonReleased(_ sender: Any) {
print("button released")
if (wantedLiter == actualLiter){
print("WIN!")
actualLiter = 0;
}
//startTime = 0.00
timer?.invalidate()
timer = nil
// timerReset = true // reset to true since you released.
}
@objc func updateTime(){
//update label every second
print("updating label ")
if (wantedLiter <= actualLiter){
print("Ooops")
actualLiter = 0;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
self.present(gameoverViewController, animated: true, completion: nil)
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
actualLiter += 0.01
numberLabel.text = String(round(1000*actualLiter)/1000)
euroLabel.text = String((round(100*actualLiter*preisProLiter)/100))
}
}
А теперь у вас есть несколько скриншотов , что может помочь.
Если вам нужно больше экранов, пожалуйста, спросите.
Прямо сейчас , Я получил следующие ошибки:
1) ViewController.swift в верхней части, помеченный как "!!!! ..."
Невозможно использовать элемент экземпляра storyBoard в инициализаторе свойства; инициализаторы свойств запускаются до того, как станет доступным 'self'
2) ViewController.swift
Невозможно преобразовать значение типа 'gameoverViewController.Type' в ожидаемый тип аргумента 'UIViewController'
3 ) ViewController.swift верхняя часть:
Использование необъявленного типа 'GameoverViewController'
Вот как я изменил код:
import UIKit
class ViewController: UIViewController {
var wantedLiter = 10.00
var timer : Timer?
var actualLiter = 0.00
var timerReset = true
var preisProLiter = 1.26
let storyBoard: UIStoryboard = UIStoryboard(name: "Gameover", bundle: nil)
var gameoverViewController: GameoverViewController!
@IBOutlet weak var preisliterLabel: UILabel!
@IBOutlet weak var euroLabel: UILabel!
@IBOutlet weak var numberLabel: UILabel!
@IBOutlet weak var numberButton: UIButton!
@IBOutlet weak var confirmButton: UIButton!
@IBAction func confirm(_ sender: Any) {
}
override func viewDidLoad() {
super.viewDidLoad()
gameoverViewController = storyBoard.instantiateViewController(withIdentifier: "overID") as? GameoverViewController
numberLabel.text = String(round(1000*actualLiter)/1000) //initial value
preisliterLabel.text = String(preisProLiter)
// Do any additional setup after loading the view.
}
@IBAction func holdingTheButton(_ sender: Any) {
print("I am holding")
timerReset = false // reset to false since you are holding the button
guard timer == nil else { return }
timer = Timer.scheduledTimer(timeInterval: 0.005, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
}
@IBAction func buttonReleased(_ sender: Any) {
print("button released")
if (wantedLiter == actualLiter){
print("WIN!")
actualLiter = 0;
}
//startTime = 0.00
timer?.invalidate()
timer = nil
// timerReset = true // reset to true since you released.
}
@objc func updateTime(){
//update label every second
print("updating label ")
if (wantedLiter <= actualLiter){
print("Ooops")
actualLiter = 0;
self.present(gameoverViewController as! UIViewController, animated: true, completion: nil)
}
actualLiter += 0.01
numberLabel.text = String(round(1000*actualLiter)/1000)
euroLabel.text = String((round(100*actualLiter*preisProLiter)/100))
}
}
(не работает)
И я изменил тип GameoverViewController на UIViewController.
Но где была моя опечатка ?? (G вместо g)?