2017-02-07 7 views
0

3 초 또는 4 초 동안 실행하고 싶은 펄스 애니메이션이 있고 그 애니메이션을 지연하여 다음 화면으로 넘어 가기 전에 해당 시간 동안 애니메이션을 실행하고 싶습니다. 지연을 위해 아래의 코드를 사용하고 있지만 함수를 호출 할 때 작동하지 않습니다.빠른 지연으로 애니메이션 실행

NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: "functionHere", userInfo: nil, repeats: false) 

아이디어가 있으면 알려 주시기 바랍니다.

let pulseAnimation = CABasicAnimation(keyPath: "opacity") 
    pulseAnimation.duration = 1 
    pulseAnimation.fromValue = 0 
    pulseAnimation.toValue = 1 
    pulseAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 
    pulseAnimation.autoreverses = true 
    pulseAnimation.repeatCount = FLT_MAX 
    XboxOneL.layer.addAnimation(pulseAnimation, forKey: "animateOpacity") 
    XboxOneR.layer.addAnimation(pulseAnimation, forKey: "animateOpacity") 
+0

[prepareForSegue' 및 지연에서 [보기에 애니메이션 효과가 있는지 확인] (http://stackoverflow.com/questions/5526476/how-to-tell-if-uiview-is-in-middle-of-animation) 따라서. – brandonscript

+0

애니메이션 코드를 게시하십시오. 어떤 종류의 애니메이션을하고 있습니까? 대부분의 함수는 완료 함수를 설정하는 방법을 가지고 있습니다.이 함수를 사용하면 애니메이션이 끝난 후 하위를 수행 할 수 있습니다. – creeperspeak

+0

당신은 그것을 무언가와 같기를 원하십니까? 사용자가 버튼 (또는 다른 동작)을 누르면 x의 지연이 생기고 애니메이션은 3 ~ 4 초가 걸리고 마침내 다른 화면으로 segue가 실행됩니까? – theMikeSwan

답변

1

UIView.animate (withDuration :)의 완료 처리기를 사용합니다. 아래 기본 샘플 :

func performMyAnimation() { 
    UIView.animate(withDuration: {$duration}, 
     animations: { /* Animation Here */ }, 
     completion: { _ in self.performSegue(withIdentifier: "segueIdentifierHere", sender: nil) } 
} 

애니메이션은 animations 블록에서 실행됩니다. 완료되면 다음 화면으로 넘어갑니다.


편집 : 문제는 지금 CABasicAnimation를 사용하여 애니메이션 코드를 포함으로, 아마도 this answer CAAnimation 콜백에 대한 당신을 위해 작동 할 수 있습니다.

기본적으로 CABasicAnimation 전화를 CATransaction으로 마무리해야합니다.

CATransaction.begin() 
CATransaction.setCompletionBlock({ 
    self.performSegue(withIdentifier: "segueIdentifierHere", sender: nil) 
}) 
// Your animation here 
CATransaction.commit() 
+0

이것은 의미가 있습니다. 그러나 구현할 때 아직 애니메이션이 없으며 자동으로 단절됩니다. – dgelinas21

+0

@ dgelinas21 'CABasicAnimation'사용법에 대한 정보를 얻었으니 이제 제 대답을 업데이트했습니다. 잘하면 도움이됩니다. –

2

것은 당신이 스위프트 3의 표준 지연을 찾고 있다면, 그것은 UIView.animate(withDuration:_:)와 관련하여 DispatchQueue API를 사용하는 것이 아마도 가장 좋습니다. 예를 들어 3 초에서 1.0 초 애니메이션을 연기하고 싶었다면

:

let yourDelay = 3 
let yourDuration = 1.0 
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(yourDelay), execute: {() -> Void in 
    UIView.animate(withDuration: yourDuration, animations: {() -> Void in 
     // your animation logic here 
    }) 
}) 

가 알려줘 경우이 애니메이션 구현 방법에 따라

+0

이것은 불행히도 나는 이것에 대한 신속한 3.0을 사용하지 않는다는 것을 이해합니다. – dgelinas21

+0

그 다음 어떤 버전을 사용하고 있습니까? @ dgelinas21 –

+0

신속한 버전 2.2를 실행 중입니다 – dgelinas21

2

에 대한 이해, 당신은 사용할 수 있습니다 :

UIView.animate(withDuration: 0.3, delay: 5.0, options: [], animations: { 
//Animations 
}) { (finished) in 
//Perform segue 
} 

이것은 애니메이션이 실행되기 전에 지연이 적용된 다음 완료 블록 (segue를 실행하는 곳)을 실행합니다.

EDIT : CAAnimations를 사용하기 위해 질문을 업데이트 했으므로이 솔루션이 효과가 없을 것이라고 생각합니다.