1 초 동안 메소드 호출을 지연시키는 쉬운 방법이 있습니까?
나는이 UIImageView
터치 이벤트에 그 반응하여합니다. 터치가 감지되면 앱에서 일부 애니메이션이 발생합니다. 1 초 후에 다른 방법을 호출하고 싶습니다. 이 경우 animationDidStop
셀렉터를 사용할 수 없습니다 .
답변
performSelector:withObject:afterDelay:
답변
당신은 또한 블록을 사용할 수 있습니다
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[object method];
});
메소드에 UI가 없으면 전역 큐를 사용할 수 있지만 대부분의 경우 dispatch_get_main_queue를 사용하려고합니다 .
편집하다:
스위프트 3 버전 :
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
object.method()
}
마찬가지로 DispatchQueue.global().asyncAfter(...
좋은 옵션 일 수도 있습니다.
답변
가장 좋은 방법은 다음과 같습니다.
[self performSelector:@selector(YourFunctionName)
withObject:(can be Self or Object from other Classes)
afterDelay:(Time Of Delay)];
withObject 매개 변수로 nil을 전달할 수도 있습니다.
예 :
[self performSelector:@selector(subscribe) withObject:self afterDelay:3.0 ];
답변
이미 많은 답변이 있으며 모두 정확합니다. 사용하려는 경우 오른쪽 하단의 요소를 선택할 수 dispatch_after
있는 스 니펫을 찾아야합니다 .Code Snippet Library
UI
따라서 코드로 디스패치 를 작성하여이 스 니펫을 호출하면됩니다 .
답변
이를 위해 0.1 초 지연 메소드가 호출 된 후 수행 선택기를 사용하여 다음 코드를 호출 할 수 있습니다.
[self performSelector:@selector(InsertView) withObject:nil afterDelay:0.1];
답변
당신은 또한 수:
[UIView animateWithDuration:1.0
animations:^{ self.view.alpha = 1.1; /* Some fake chages */ }
completion:^(BOOL finished)
{
NSLog(@"A second lapsed.");
}];
이 경우 애니메이션 작업을하려면보기를 약간 변경해야합니다. 실제로 해 키지 만 블록 기반의 물건을 좋아합니다. 또는 아래 @mcfedr 답변을 마무리하십시오.
waitFor(1.0, ^
{
NSLog(@"A second lapsed");
});
typedef void (^WaitCompletionBlock)();
void waitFor(NSTimeInterval duration, WaitCompletionBlock completion)
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC),
dispatch_get_main_queue(), ^
{ completion(); });
}
답변
당신은 이것을 할 수 있습니다
[self performSelector:@selector(MethodToExecute) withObject:nil afterDelay:1.0 ];