基本上我想在游戏开始之前创建英雄将继续前进的道路,这样用户就可以看到他的第一步,但问题是,当我在override func viewDidLoad
中发布代码时,它只会加载我发布的图像外观Main.storyboard
不是那个代码,使用print
它会显示图片已经到位,但这不是我在屏幕上看到的。或者,我将相同的代码放在@IBAction func play
中,然后按下播放按钮图像后加载它们。以下是我放在viewDidLoad中的代码:
@IBOutlet weak var hero: UIImageView!
@IBOutlet weak var bigroad: UIImageView!
@IBOutlet weak var road: UIImageView!
@IBOutlet weak var roadTwo: UIImageView!
@IBOutlet weak var play: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
self.play.hidden = false
self.hero.hidden = false
self.bigroad.hidden = false
self.road.hidden = false
self.roadTwo.hidden = false
self.hero.center.x = (width / 2) + 3
self.hero.center.y = ((height / 2.5) + (height / 3.5)) - 46
self.bigroad.center = CGPointMake(width / 2 , (height / 2.5) + (height / 3.5))
self.road.center = CGPointMake(width / 2 + 39, (height / 2.5) + (height / 3.5) - 29)
self.roadTwo.center = CGPointMake((width / 2 ) + 78, ((height / 2.5) + (height / 3.5)) - 58)
正如我所说,当我在@IBAction func play
中放入相同的代码时,当func播放开始时,一切都已到位。
我的问题是为什么图片没有加载到位,他们需要在viewDidLoad中,但在播放功能中完美加载?我做错了什么,如何防止我的错误?
答案 0 :(得分:2)
当所有自动布局过程完成后,您需要将帧代码移动到点。例如:
var layedOut = false
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if !layedOut {
// perform your frame code
self.hero.center.x = (width / 2) + 3
self.hero.center.y = ((height / 2.5) + (height / 3.5)) - 46
self.bigroad.center = CGPointMake(width / 2 , (height / 2.5) + (height / 3.5))
self.road.center = CGPointMake(width / 2 + 39, (height / 2.5) + (height / 3.5) - 29)
self.roadTwo.center = CGPointMake((width / 2 ) + 78, ((height / 2.5) + (height / 3.5)) - 58)
}
}
请注意,viewDidLayoutSubviews
可以多次调用,因此当所有屏幕都已在屏幕上并且在此方法中禁用帧初始化代码时需要捕获点,例如带标记
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
layedOut = true
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
layedOut = false
}
答案 1 :(得分:0)
weak var
未加载插座,尝试在viewWillAppear()上执行此操作在viewDidLoad()
上执行此操作还为时尚早