2013-07-02 4 views
1

텍스트가 변경 될 때마다 UILabel 텍스트 업데이트를 만들기위한 코드를 작성하고 싶습니다. 내가 좋아하는 작은 데모 쓰고 있어요 : I 버튼을 클릭하면UILabel 디스플레이가 업데이트되지 않음

- (IBAction)ButtonPressed:(id)sender { 
    for(int i = 0; i < 100000; ++i) 
    { 
     [self.Label setText:[NSString stringWithFormat:@"%d",i]]; 
     [self.Label setNeedsDisplay]; 
    } 
} 

을, 라벨은 99999 번으로 변경,하지만 난 그게 99999 사람은 0에서 99999 시간을 표시 할 것으로 예상 코드가 왜 아이디어가있다 작동 안함?

미리 감사드립니다.

답변

3

setNeedsDisplay은보기에 이 그려지기를 원하지만을 그려야한다고 말합니다. for 루프가 완료되면 다음 드로 사이클에서 뷰가 다시 그려집니다. 10 만 건의 변경 사항을 모두 표시하려면 사람이 인식 할 수있는 양만큼 레이블 업데이트를 지연해야합니다.

+0

정확합니다. iOS에서 그리기는 실시간으로 이루어지지 않습니다. 드로잉은 메서드가 완료되고 주 루프에 빠지면 발생합니다. –

+0

고마워,이 말이 맞아. 지연 시간을 약 0.1 초로 설정해야 완벽하게 작동합니다. – user2480277

2

위의 대답은 정확하지만 당신은 눈에 띄게 라벨의 내용을 업데이트 할 경우, 정교하게, 당신은하지만, 이것은 아마 관련이없는 당신의 목적을 위해 다음과 같은

- (IBAction)ButtonPressed:(id)sender { 
    for(int i = 0; i < 100000; ++i) 
    { 
     double delayInSeconds = 0.01 * i; 
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds *  NSEC_PER_SEC)); 
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      [self.Label setText:[NSString stringWithFormat:@"%d",i]]; 
      [self.Label setNeedsDisplay]; 
     }); 
    } 
} 

을 시도 할 수 있습니다. 보다 촉각적인 접근법은 버튼이 인스턴스 변수에서 눌려진 횟수를 저장하고, 터치 할 때마다 버튼을 증가시키고 레이블 값을 적절하게 설정하는 것입니다.

+0

고맙습니다. 비슷한 것을 사용하고 있습니다. – user2480277

관련 문제