2017-11-29 3 views
0

나는 아이폰 OS 프로그래밍의 모든 모호성 이해하기 위해 노력하고있어 개발자는과 같이 뷰 속성에 하위 뷰 그들의 기본보기를 추가iOS에서보기를 하위보기로 추가하는 것과보기 속성을보기 속성에 할당하는 것의 차이점은 무엇입니까?</p> <pre><code>let sceneView = ARSCNView(frame: self.view.frame) view = sceneView </code></pre> <p>나는 또한 본 적이 그러나 : 나는 개발자 그래서 같이의 ViewController의보기 속성에 자신의 기본보기를 할당 자습서를 본 적이 있도록

let sceneView = ARSCNView(frame: self.view.frame) 
view.addSubView(sceneView) 

이 두 프로세스가 동일하거나 다른?

답변

5

그들은 동일하지는 않지만 기능면에서 유사합니다.

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.backgroundColor = UIColor.blue 
    let sceneView = UIView(frame: self.view.frame) 
    sceneView.backgroundColor = UIColor.red 
    self.view.addSubview(sceneView) 
} 

디버거에서 : 교체에

subview

비교 :

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.backgroundColor = UIColor.blue 
    let sceneView = UIView(frame: self.view.frame) 
    sceneView.backgroundColor = UIColor.red 
    self.view = sceneView 
} 

디버거에서 :

subview

,536 여기서 차이의 데모입니다

하위 뷰에 의해 숨겨지기는하지만 sceneView가 하위 뷰로 추가 될 때 원본 파란색보기는 여전히 뷰 계층 구조에 있습니다. 그러나보기를 바꾸면 원본 파란색보기가 더 이상보기 계층 구조의 일부가 아닙니다.

참고 : viewDidLoad()를 rmaddy로 바꾸는 대신 loadView()에서보기를 설정하려면 다음과 같이 제안하십시오. 트릭은 적절한 프레임을 얻고 있습니다. 예를 들어 네비게이션 컨트롤러에 있으면 프레임이 달라집니다.

override func loadView() { 
    let sceneView = UIView(frame: UIScreen.main.bounds) 
    sceneView.backgroundColor = UIColor.red 
    self.view = sceneView 
} 
+0

이 프로세스는 더 나은 관행입니까, 아니면이 프로세스가 개발자로서 가장 염려하지 않는 프로세스입니까? –

+1

솔직히 어느 쪽이든별로 중요하지 않습니다. 뷰를 자신의 뷰로 기술적으로 대체하면 뷰 계층 구조가 단순 해 지므로 일반적으로이 접근 방식을 권장하지만 Apple이 공식 입장을 가지고 있는지 여부를 알지 못합니다. –

+3

'viewDidLoad'에서'view'를 재 할당하지 마십시오. 'view' 속성에 커스텀 뷰를 할당하고 싶다면,'loadView'를 오버라이드하고 거기에서 수행하십시오. – rmaddy

관련 문제