UIView *test=[[UIView alloc]initWithFrame:CGRectMake(20, 150, 10, 20)];
[test setBackgroundColor:[Util colorWithHexString:@"#FF00007f"]];
[self.view addSubview:test];
int testNum=0;
for(int i=0;i<50;i++){
testNum=0;
//do something spend 100 ms
while(testNum<800){
testNum+=1;
}
[test setFrame:CGRectMake(20, 150, 10+i*200/50, 20)];
}
사용자 정의 진행률 표시 줄을 작성하고 싶습니다.iOS에서 UIView setFrame이 작동하지 않는 이유
위와 비슷하지만 uiview는 마지막 루프에서만 다시 그리기 만합니다.
어떻게 문제를 해결할 수 있습니까? 그리고, 어떻게됩니까?
감사합니다.
나는
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
int testNum=0;
for(int i=0;i<50;i++){
testNum=0;
while(testNum<800){
NSLog(@"%d",testNum);
testNum+=1;
}
dispatch_async(dispatch_get_main_queue(), ^{
[test setFrame:CGRectMake(20, 150, 10+i*200/50, 20)];
});
}
});
이 작업에 코드를 변경할 수 있지만 루프 동안 그냥 내 프로젝트에 블록 코드에 대한 상황을 시뮬레이션 할 수 있습니다.
사실, 시간 코드는 목록 항목을 할당하고 초기보기이기 때문에 주 스레드에서 필요합니다.
제안 사항?
감사합니다.
"동시성 프로그래밍"또는 "멀티 스레딩"또는 Apple에서 제공하는 여러 용어 및 시스템 중 하나 인 Global Distribution Center에 대해 알아보고 학습해야합니다. 기본적으로 문제를 "코드에서 100 가지를 수행한다고 말하면됩니다"라고 생각하지만, "화면을 업데이트하는"행위는 100 가지 모두 후에 일어날 수 있습니다. ". –
새로운 코드에 대해서는 말할 것도없고, 이론적 인 것이지 실제적인 것이 아닙니다. 임의로 진행 막대를 타이밍하는 것은 일반적인 구현이 아니라고 말할 수 있습니다. –
고맙습니다. for 루프를 제거합니다. 그런 다음 진행률 표시 줄 다시 그리기 후 하나의 목록 항목을로드하십시오. – miterfrants