2017-02-17 8 views
0

정확히 UIView의 경계 변수가 설정되고 초기화되는 질문입니다. 의도 한대로경계가 설정되었다고 가정하고 UIView에서 변수 초기화

private var ballSize: CGSize { 
     let size = bounds.size.width/20 
     return CGSize(width: size, height: size) 
} 

모든 것이 잘 작동 : 나는 다음과 같이 뷰의 경계 변수를 사용하여 초기화 내보기에 변수 ballSize 있습니다. 정확히 그럴 때, UIView의 범위가 설정되어 있습니까? 그리고 UIView 클래스의 변수를 초기화 할 때 경계를 사용할 수 있다고 가정하는 것이 안전할까요?

답변

0

프로그래밍 방식으로 UIView를 사용하는 경우 addSubview 메서드를 호출 한 후 또는 Xib의 UIVIew를 사용하는 경우 -(void)viewDidAppear:(BOOL)animated에서 초기화를 수행하면 바운드 값이 올바르게 표시됩니다.

+0

내 질문은 UIView 클래스에서 정의한 다른 변수 앞에있는 초기화에서 'UIView'의 경계가 설정되어 있으므로 위와 같이 변수를 초기화 할 때 사용할 수 있습니까? – scozzle

0

사용중인 초기화 프로그램에 따라 다릅니다. 바깥 쪽 UIViewUIView(CGRect(x,y,width,height))을 사용하여 호출한다고 가정하면 bounds 속성을 최대한 빨리 사용할 수 있습니다. init 안에 프레임을 전달하지 않으면 하위보기에서 아직 사용하지 못할 수도 있습니다.

0

UIView 클래스의 변수 초기화에 'bounds'를 사용하는 것이 허용되지 않습니다. 이는 'self.bounds'와 동일하므로 허용됩니다.

private var ballSize = CGSize(width: bounds.size.width/20, height: bounds.size.height/20)

을 어떤 이유로, 위 : 나는이 작업을 수행하려고하면 오류, 사실, 나는이 " '자기'전에 실행 속성 이니셜 라이저로 볼 수 있습니다 인스턴스 멤버 속성 이니셜 라이저 내에서 '경계'는 사용할 수 없습니다"얻을 변수가 계산 된 속성이기 때문에 질문에있는 코드는 'self.bounds'에 대한 액세스 권한과 함께 작동합니다.