[ios] 1 초 동안 메소드 호출을 어떻게 지연시킬 수 있습니까?

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 LibraryUI

여기에 이미지 설명을 입력하십시오

따라서 코드로 디스패치 를 작성하여이 스 니펫을 호출하면됩니다 .

여기에 이미지 설명을 입력하십시오


답변

이를 위해 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 ];