objective-c - 딜레이 - swift4 delay




메소드 호출을 1 초 동안 지연시킬 수 있습니까? (8)

0.1 초 지연 메서드가이를 수행하기위한 다음 코드를 호출 한 후에 수행 선택기를 사용할 수 있습니다.

[self performSelector:@selector(InsertView)  withObject:nil afterDelay:0.1]; 

메서드 호출을 1 초 지연시키는 쉬운 방법이 있습니까?

터치 이벤트에 반응하는 UIImageView 가 있습니다. 터치가 감지되면 앱에서 일부 애니메이션이 발생합니다. 1 초 후에 다른 방법을 호출하고 싶습니다. 이 경우에는 animationDidStop 선택기를 사용할 수 없습니다.


가장 좋은 방법은 다음과 같습니다.

[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 ];

당신은 또한 수:

[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(); });
}

블록을 사용할 수도 있습니다.

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(... 또한 좋은 옵션 일 수 있습니다.


이미 많은 답변이 있으며 모두 정확합니다. dispatch_after 를 사용하려는 경우 오른쪽 하단의 Code Snippet Library ( UI 요소를 선택할 수 있음)에 포함 된 스 니펫을 찾아야합니다.

코드에서 dispatch 를 작성하여이 스 니펫을 호출하면됩니다.


확인 된 솔루션의 스위프트 3 솔루션이 있습니다.

self.perform(#selector(self.targetMethod), with: self, afterDelay: 1.0)

그리고 방법이 있습니다.

@objc fileprivate func targetMethod(){

}

참고 : 이것은 하나의 메서드뿐만 아니라 전체 스레드를 일시 중지합니다.
방법을 호출하기 바로 전에 1000ms 동안 절전 / 대기 / 정지를 호출합니까?

Sleep(1000); // does nothing the next 1000 mSek

Methodcall(params); // now do the real thing

편집 : 위의 답변은 일반적인 질문에 적용됩니다. "어떻게 1 초 동안 메서드 호출을 지연시킬 수 있습니까?"라는 질문은 대답 당시 물었습니다. (원래 질문으로부터 7 분 이내에 답변을 얻었습니다. )). 그 당시 언어에 대한 정보가 없었기 때문에 수면을 사용하는 적절한 방법에 대해 친절하게 불평을하지 않습니다. XCode는 수업이 부족합니다 ...








uikit