2016-07-19 9 views
0

基本上我想比賽開始之前創建路的地方英雄將繼續前進正確加載,這樣用戶就可以看到他的第一個步驟,但問題是,當我在override func viewDidLoad只加載圖像後代碼外觀是我在Main.storyboard中發佈的不是該代碼,使用print它表明圖像已到位,但它們並不是我在屏幕上看到的。或者,我在@IBAction func play中放置相同的代碼,然後按播放按鈕圖像加載,因爲它們需要。 下面是代碼,我把viewDidLoad中:爲什麼的UIImageView不使用斯威夫特

@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

您需要將您的幀代碼,以點帶面,當所有的自動佈局過程完成。例如:

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

謝謝你,你的答案工作! – artG

0
weak var 

奧特萊斯不加載,嘗試這樣做,在viewWillAppear中()這只是太早做對viewDidLoad中()

+0

錯誤。出口加載,viewWillAppear將給出相同的結果 –

+0

如果網點沒有加載,他會因'play:UIButton!'上的'!'而在'self.play.hidden'上崩潰。 –