나는 사용자에게 약간의 힌트를주기 위해 표시하고 숨기기 위해 View
을 가지고있다. 새로운 뷰를 표시 할 때GCD를 사용하여 애니메이션 시퀀스를 제어하는 방법
-(void)show{
[UIView animateWithDuration:3.0f
animations:^{
//do something to show self to give hint;
self.frame = CGRectMake(0,0,0,0);
} completion:nil];
}
-(void)hide{
[UIView animateWithDuration:3.0f
animations:^{
//do something to hide self to give hint;
self.frame = CGRectMake(centerX,centerY,100,100);
} completion:nil];
}
, 내가 hide method
다음 show method
를 호출해야합니다 :
쇼 및 숨기기 방법은 다음과 같이 몇 가지를 본다. 그러나 지속 시간 지연 3.0f는 약간의 오류를 유발합니다. 나는이 같은 방법을 사용했다 : 바로 hide method
후 show method
를 호출했다
dispatch_async(dispatch_get_main_queue(), ^{
[view hide];
});
dispatch_async(dispatch_get_main_queue(), ^{
[view show];
});
. 애니메이션은 대기열에 제출되는 시퀀스로 실행할 수 없습니다. 내가 원하는 것은 hide method
완료된 후 정확히 실행 된 show method
입니다. 어떻게이 두 가지 방법의 순서를 제어 할 수 있습니까?
완료 처리기를 사용할 수없는 이유는이 두 메서드가 호출되는 위치를 보장 할 수 없거나 다른 show method
또는 hide method
을 호출 할 때보기가 표시되는지 여부 때문입니다.
명확하지 않은 의견이 있으면 알려주십시오. 나는 내 질문을 재 편집 할 것이다.
PS : 그냥 플래시 아니다
. 다음 show
메서드가 호출되면 마지막 뷰가 표시되거나 숨겨지고 마지막 뷰가 표시되는 시간을 보장 할 수 없습니다. 즉, 뷰가 표시되고 hide
메서드가 호출되어 이미 완료된 경우 show
메서드가 호출되면 결과가 올바르다. 뷰가 표시되고있는 경우 main_queue
이 연속이지만 애니메이션 블록이 동기식으로 실행되므로 결과가 잘못 표시되어 다른 힌트보기를 제시해야합니다. 먼저 hide
을 호출 한 다음 show
을 호출합니다. 내가 찾고있는 GCD에서 마지막으로 대기열에 블록을 완료 후 블록을 실행하는 데 도움이 될 수있는 일종의 잠금을 찾고 있습니다 show
및 hide
방법을 변경하는 것보다 완료됩니다. 많은 다른 종류의 매개 변수가있는 show
및 hide
메서드에 대한 다른 많은 호출이 있기 때문에 코드에서 많은 부분을 수정해야합니다.
[이 질문]에 대한 해답을 숨기 : //stackoverflow.com/questions/26090071/show-hide-uiview-twice-every-5-seconds-using-nstimer)는 키 프레임 애니메이션을 제안합니다. 당신을 위해 일할 수도 있습니다. – Droppy
show 또는 hide 메서드에 플래그를 전달하여 다음 호출 할 것인지를 나타냅니다. 그런 다음 완성 방법으로 작업하십시오. – jrturton
@ jrturton의 해결책이 효과적입니다. 또한 NSOperationQueue를 생성하고 show/hide 명령을이 큐에 추가 할 수 있습니다. 더 이상 실행되지 않으면 작업에 대해'cancel'을 호출 할 수 있습니다. –