2011-04-13 7 views
0


"에 대한"에하지 않은 변경을하지 전체 for 루프가 완료 될 때까지 변경되지 않습니다. 내가 뭘 잘못 했니?있는 UIButton 이미지는 내가 질문이 루프

for (size_t i=0; i< 100; ++i){ 
     switch (variable) { 
     case 0: 
      [self changeRedButtonToWhite: redButton]; 
     break; 
     case 1: 
     .... 
     } 
    } 

-(IBAction) changeRedButtonToWhite: (id)sender{ 
    [sender setBackgroundImage: whiteImage forState: UIControlStateNormal]; 
} 
+0

어디에서'변수'를 설정합니까? – benwong

+0

변수의 시작 값은 무엇입니까? 또한 for 루프와 switch/case 문에 대한 이유는 무엇입니까? – Sabobin

+0

변수는 중요하지 않습니다. 변수가 0이면 아무 일도 일어나지 않습니다. thats 요점?!? – NewYearsEve

답변

2

당신은이 작업을 수행하는 루프를 사용할 수 없습니다, 당신은 대신 NSTimer를 사용하여 시도해야합니다. 주 스레드 내부에서 루프가 진행되는 동안 UI가 새로 고쳐지지 않습니다.

+0

하지만 어떻게 할 수 있습니까? 나는 4 가지 색상을 가지고 있으며 무작위로 깜박 거리고 싶다. 그래서 내가 할 수있는 유일한 방법은 for-loop를 사용하는 것입니다. – NewYearsEve

+0

매우 짧은 timelapse로 NSTimer를 사용하여 색상 버튼을 무작위로 변경하는 메서드를 호출하십시오. – scalbatty

+0

고마워요! 그것은 잘 작동했습니다! – NewYearsEve

-1

다음 작업을 수행 할 수 없습니까?

모든 버튼을 NSMutableArray에 추가하거나 할당 한 후에 더 많은 버튼을 추가하지 않으려는 경우 NSArray을 사용하십시오.

NSMutableArray *buttonsArray = [[NSMutableArray alloc] initWithObjects:button1, button2, button3, nil]; //and so on.... 

하고 ....

for(UIButton *button in buttonsArray){ 
    [button setBackgroundImage: whiteImage forState: UIControlStateNormal]; 
} 
0

백그라운드 스레드에 대한 루프를 넣어 주 스레드에서 -changeRedButtonToWhite를 호출합니다.

1

@ Luzal의 설명은 정확합니다. 버튼의 배경색을 설정하고 있지만 버튼이 다시 그려야하는 것으로 표시되는 것입니다. 적어도 실행이 실행 루프로 돌아갈 때까지 다시 그리기가 발생하지 않으며 for 루프가 끝날 때까지는 발생할 수 없습니다.

루프에서 수행중인 다른 작업을 게시 한 코드는 알 수 없지만 지연 메커니즘으로 사용하고있는 경우, 예를 들어 variable과 같이 버튼 색상을 다시 빨간색으로 변경하면 어쨌든 훌륭한 계획은 아닙니다. NSTimer를 사용하여 색상 변경 기간 또는 -performSelector : afterDelay :를 관리하거나 Core Animation을 사용할 수 있습니다.

관련 문제