메서드 호출을 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];
});
대부분의 경우 dispatch_get_main_queue를 사용하지만 메서드에 UI가 없는 경우 글로벌 큐를 사용할 수 있습니다.
편집:
Swift 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)];
Object 파라미터와 마찬가지로 0을 전달할 수도 있습니다.
예:
[self performSelector:@selector(subscribe) withObject:self afterDelay:3.0 ];
이미 많은 답이 있고 모두 정답이다.를 사용하고 싶은 경우dispatch_after
에 포함되어 있는 스니펫을 찾고 있을 것입니다.Code Snippet Library
오른쪽 하단의 (여기에서는,UI
요소).
따라서 디스패치를 코드로 작성하여 이 스니펫을 호출하기만 하면 됩니다.
0.1초 지연 방식이 호출된 후 perform selector를 사용하여 다음 코드를 호출할 수 있습니다.
[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 ];
스위프트 2.x
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
print("do some work")
}
Swift 3.x --&-- Swift 4
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
print("do some work")
}
또는 a에 합격escaping closure
func delay(seconds: Double, completion: @escaping()-> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + seconds, execute: completion)
}
선택한 솔루션에서 Swift 3 솔루션이 있습니다.
self.perform(#selector(self.targetMethod), with: self, afterDelay: 1.0)
그리고 방법이 있다.
@objc fileprivate func targetMethod(){
}
Swift 3에서 사용
perform(<Selector>, with: <object>, afterDelay: <Time in Seconds>)
메모: 하나의 방법뿐만 아니라 전체 스레드가 일시 중지됩니다.
메서드를 호출하기 직전에 sleeve/wait/halt로 1000밀리초 동안 호출하시겠습니까?
Sleep(1000); // does nothing the next 1000 mSek
Methodcall(params); // now do the real thing
편집: 위의 답변은 응답 시 질문이었던 "메서드 호출을 1초간 지연시키는 방법"에 해당됩니다(원래 질문에서 7분 이내에 답변이 제공됨).그 당시 언어에 대한 정보가 없었기 때문에 수업 부족에 대해 올바른 수면 방법에 대해 불평하지 말아주세요.
언급URL : https://stackoverflow.com/questions/920675/how-can-i-delay-a-method-call-for-1-second
'programing' 카테고리의 다른 글
이미지를 바이트 배열로 변환하는 방법 (0) | 2023.04.09 |
---|---|
PostgreSQL에서 활성 연결을 나열하는 방법 (0) | 2023.04.09 |
git에게 자기 서명 증명서를 받아들이게 하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
쉬운 영어로 "git reset"은 무엇을 합니까? (0) | 2023.04.09 |
커스텀 리스트에 WPF ComboBox 바인딩 (0) | 2023.04.09 |