2016-09-15 3 views
0

[UIView]를 반복하면서 프레임을 설정 한 다음 하위 뷰로 UIScrollView에 추가합니다. 코드에서 나는 내가 테스트 목적을 위해 서로 의견을 구별 할 수있는 임의의 배경 색상을 지정하고 :for 루프 내의 UIView에 CGRect를 할당하고 할당합니다.

for i in 0...questionViews.count - 1 { 
    let hue: CGFloat = CGFloat(arc4random() % 256)/256 
    let saturation: CGFloat = CGFloat(arc4random() % 128)/256 + 0.5 
    let brightness: CGFloat = CGFloat(arc4random() % 128)/256 + 0.5 

    questionViews[i].backgroundColor = UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: 1) 

    questionViews[i].frame = CGRect(x: screen.width * CGFloat(i), y: 0, width: screen.width, height: screen.height) 
    questionsScrollView!.addSubview(questionViews[i]) 
} 

을하지만,이를 통해 내가 루프와 그들을 인쇄하는 경우 :

for i in 0...questionViews.count - 1 { 
    print(questionViews[i].frame) 
} 

결과를

(3000.0, 0.0, 375.0, 667.0) 
(3000.0, 0.0, 375.0, 667.0) 
(3000.0, 0.0, 375.0, 667.0) 
(3000.0, 0.0, 375.0, 667.0) 
(3000.0, 0.0, 375.0, 667.0) 
(3000.0, 0.0, 375.0, 667.0) 
(3000.0, 0.0, 375.0, 667.0) 
(3000.0, 0.0, 375.0, 667.0) 
(3000.0, 0.0, 375.0, 667.0) 

왜 모든 CGRect는 for 루프에서 x의 최종 값을 갖습니까?

편집 :

questionViews 배열 우선 단지 빈 CGRects으로 초기화 설정된다 :

questionViews = [UIView](count: numberOfQuestions, repeatedValue: UIView(frame: CGRect())) 
+1

questionViews = [UIView](count: numberOfQuestions, repeatedValue: UIView(frame: CGRect())) 

당신이 questionViews' 배열을' –

+0

@SamM를 만드는 방법을 기재 해주십시오 업데이트 : – KamaKAzii

답변

3

참조 형식의 반복 값을 갖는 배열을 만들기에만 작성 한 항목 및 모든 색인을 가리 킵니다. 따라서 for 루프에서는 그 하나의 UIView의 모든 인덱스 프레임을 반복해서 설정하고 있습니다.

이 대체 :

var questionViews = [UIView]() 
for _ in 0..<numberOfQuestions { 
    questionViews.append(UIView(frame: CGRect())) 
} 
+0

이 종류의 선생님 감사합니다! – KamaKAzii