2016-06-14 172 views
1

我有一個包含4個用UIBezierPath製作的圓圈的視圖的應用程序。只在視圖第一次顯示時出現viewDidAppear動作

view with circles

而且你可以在某個圈子單擊以獲取有關項目

view with details

的事情是一個細節,圓是有一些限制的子視圖,所以我可以不要在viewDidLoad方法中繪製它們(我試過但它是一團糟),所以整個繪圖工作都是在viewDidAppear方法中完成的,但是每次出現視圖時都會繪製圓。

所以,如果我點擊了一圈再回來的圓圈查看了大量的時間,我結束了:

view with circles after I went to check the details a lot for any circle

我也試過用viewDidLayoutSubviews方法,但我得到一個無限循環。所以我問是否有人有想法來處理這個問題。 (可能最乾淨的方式)

這是我的viewDidAppear樣子:

override func viewDidAppear(animated: Bool) { 
     createCircle(firstCircle, text: "Breathe", color: blue, directionForAdjustment: 1, identifier: 0) 
     createCircle(secondCircle, text: "Cocoon", color: green, directionForAdjustment: 1, identifier: 1) 
     createCircle(thirdCircle, text: "Smokeless", color: cyan, directionForAdjustment: -1, identifier: 2) 
     createCircle(fourthCircle, text: "Sleep", color: purple, directionForAdjustment: -1, identifier: 3) 
} 
+0

只需添加一個標誌在它的init圈後 –

+0

你的圈子值的變化? 之後沒有任何改變,你是寫代碼的viewdidload方法。 –

回答

2

如果你想這個代碼來執行,只有當視圖出現在第一時間,只需添加一個布爾變量,上面寫着「被初始化「。如果不在viewDidAppear中運行代碼,則將其設置爲true。

+0

這是我過去做過很多次的方式。 –

+0

爲什麼我沒有想到這一點.. –

1

您可以覆蓋並添加viewDidLayoutSubviews中的UI自定義,在super viewDidLayoutSubviews之後綁定的子視圖在屏幕上是正確的,並且每次出現視圖時都不會執行。

編輯: 無限循環的問題可能是您在createCircle方法中調用setNeedsLayout。我想你應該重新考慮viewDidLayoutSubviews和你的createCircle邏輯,因爲它應該是你想要的最佳流程。

1

您還可以使用dispatch_once

class YourClass: UIViewController { 
    static var once: dispatch_once_t = 0 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     _dispatch_once(&YourClass.once) { 
      self.viewDidAppearFirstTime() 
     }  
    } 

    func viewDidAppearFirstTime() { 
     createCircle(firstCircle, text: "Breathe", color: blue, directionForAdjustment: 1, identifier: 0) 
     createCircle(secondCircle, text: "Cocoon", color: green, directionForAdjustment: 1, identifier: 1) 
     createCircle(thirdCircle, text: "Smokeless", color: cyan, directionForAdjustment: -1, identifier: 2) 
     createCircle(fourthCircle, text: "Sleep", color: purple, directionForAdjustment: -1, identifier: 3) 
    } 
} 
相關問題