2017-05-31 75 views
0

我有一個簡單的UIView子類,看起來像這樣:`覆蓋init(frame:CGRect)`從不叫?

import UIKit 

class AngleViewManager: UIView { 

    class AngleView: UIView { 
     override init(frame: CGRect) { 
      super.init(frame: frame) 
      backgroundColor = UIColor.red 
     } 


     init(first: CGPoint, second: CGPoint, third: CGPoint) { 
      // setup 
      super.init(frame: CGRect(dimensions)) 
     } 

     required init?(coder aDecoder: NSCoder) { 
      fatalError("init(coder:) has not been implemented") 
     } 
    } 
} 

當我初始化內AngleViewManager一個AngleView例如像

AngleView(firstPoint, secondPoint, thirdPoint)

背景色不紅,並設置斷點在重寫的init中顯示它永遠不會被調用,即使我在我的自定義初始化程序中明確地調用它,但它確實被調用成功。

我錯過了一些明顯的東西嗎?

+0

'我失去了一些東西明顯' - >是的,是你?d – Alexander

回答

1

您正在調用init(frame: CGRect)的超類(UIView)實現。

它只是改變self.init(frame: frame)

+1

這將要求它是一個'convenience'初始化。 – Connor

+0

如果我將其更改爲'convenience'初始化程序+稱爲'self.init',如何在實例初始化之前訪問實例變量? –

+0

@JosueEspinosa在'// setup'之前放置'super.init(frame:CGRect(dimensions))'' – Alexander