ios - programming - objective c uikit




Objective-C 블록 지연 동작 (2)

Objective-C에서 작업을 지연시키는 몇 가지 방법이 있습니다.

performSelector:withObject:afterDelay:

또는 NSTimer 사용하십시오.

그러나 다음과 같은 일을 할 수있는 블럭 (block)과 같은 환상적인 것이 있습니다 :

[UIView animateWithDuration:1.50 delay:0 options:(UIViewAnimationOptionCurveEaseOut|UIViewAnimationOptionBeginFromCurrentState) animations:^{

    }completion:^(BOOL finished){
}];

불행히도이 방법은 애니메이션 효과에만 적용됩니다.

한 메서드 에서 블록을 사용하여 지연을 만들려면 어떻게해야합니까? 따라서 모든 @selectors 를 사용할 필요가없고 새 메서드를 별도로 만들지 않아도됩니까? 감사!


Swift에서 지연 후 블록을 트리거하는 방법은 다음과 같습니다.

runThisAfterDelay(seconds: 4) { () -> () in
    print("Prints this 4 seconds later in main queue")
    // Or just call animatedMyObject() right here
}

/// EZSwiftExtensions
func runThisAfterDelay(seconds seconds: Double, after: () -> ()) {
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC)))
    dispatch_after(time, dispatch_get_main_queue(), after)
}

내 레포의 표준 기능으로 포함되어 있습니다 : https://github.com/goktugyil/EZSwiftExtensions


dispatch_after를 사용하십시오.

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    //code to be executed on the main queue after delay
    [self doSometingWithObject:obj1 andAnotherObject:obj2];
});






cocoa-touch