为什么UIImageView没有使用Swift正确加载

时间:2016-07-19 12:04:12

标签: ios swift uiimageview iboutlet viewdidload

基本上我想在游戏开始之前创建英雄将继续前进的道路,这样用户就可以看到他的第一步,但问题是,当我在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中,但在播放功能中完美加载?我做错了什么,如何防止我的错误?

2 个答案:

答案 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()

上执行此操作还为时尚早