为什么 UIImageView 使用 Swift 没有正确加载
Why did UIImageView did not load properly using Swift
基本上我想在游戏开始前创建英雄继续前进的道路,这样用户就可以看到他的第一步,但问题是当我 post 在 override func viewDidLoad
中编写代码时,它只会加载图像外观我在 Main.storyboard
中 post 不是那个代码,使用 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 play 开始时,一切就绪。
我的问题是为什么图像没有加载到位,它们需要在 viewDidLoad 中,但在播放功能中加载完美?我做错了什么?如何避免我的错误?
weak var
插座未加载,请尝试在 viewWillAppear() 上执行此操作在 viewDidLoad() 上执行此操作还为时过早
当所有自动布局过程完成时,您需要将框架代码移动到点。例如:
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
}
基本上我想在游戏开始前创建英雄继续前进的道路,这样用户就可以看到他的第一步,但问题是当我 post 在 override func viewDidLoad
中编写代码时,它只会加载图像外观我在 Main.storyboard
中 post 不是那个代码,使用 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 play 开始时,一切就绪。
我的问题是为什么图像没有加载到位,它们需要在 viewDidLoad 中,但在播放功能中加载完美?我做错了什么?如何避免我的错误?
weak var
插座未加载,请尝试在 viewWillAppear() 上执行此操作在 viewDidLoad() 上执行此操作还为时过早
当所有自动布局过程完成时,您需要将框架代码移动到点。例如:
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
}