2015-08-14 2 views
0

Я пытаюсь выстрелить анимации и когда анимация закончила я хочу изображение, чтобы остаться в UIImageView, что анимация в настоящее время работает в.изображения не отображается после анимации

изображения, однако, не является отображается, если я дважды запускаю анимацию. Вот мой код:

@IBAction func selfRightButton(sender: UIButton){ 
    Visuals.endgameAnimation(winLoseAnimationView, animationFlow: "win"); 
    winLoseAnimationView.image = UIImage(named: "win_00012.png"); 
} 

Вот код для метода endgameAnimation:

static func endgameAnimation(animationImage: UIImageView, animationFlow: String){ 
    var counter : Int?; 
    var duration : Double?; 
    var animationFlowImagePrefix : String?; 
    var imageList = [UIImage](); 

    if (animationFlow == "bang"){ 
     counter = 11; 
     animationFlowImagePrefix = "bang_00001_000"; 
     duration = 0.8; 
    } 
    if (animationFlow == "confetti"){ 
     counter = 59; 
     animationFlowImagePrefix = "confetti_000"; 
     duration = 0.8; 
    } 
    if (animationFlow == "lose"){ 
     counter = 12; 
     animationFlowImagePrefix = "lose_000"; 
     duration = 0.8; 
    } 
    if (animationFlow == "win"){ 
     counter = 12; 
     animationFlowImagePrefix = "win_000"; 
     duration = 0.8; 
    } 

    var i : Int?; 

    for (i = 0; i < counter; ++i!) { 
     if (i < 9) { 
      animationFlowImagePrefix! += "0"; 
      animationFlowImagePrefix! += String(i!+1); 
     } else { 
      animationFlowImagePrefix! += String(i!+1); 
     } 

     var imageToAppend:UIImage = UIImage(named: animationFlowImagePrefix!)!; 

     imageList.append(imageToAppend); 
     animationFlowImagePrefix = animationFlowImagePrefix!.substringToIndex(animationFlowImagePrefix!.endIndex.predecessor()) 
     animationFlowImagePrefix = animationFlowImagePrefix!.substringToIndex(animationFlowImagePrefix!.endIndex.predecessor()) 
    } 

    animationImage.animationImages = imageList; 
    animationImage.animationDuration = duration!; 
    animationImage.animationRepeatCount = 1; 
    animationImage.startAnimating(); 
} 
+0

Но показать код для 'Visuals.endgameAnimation'. Если вы хотите помочь, _show your code_. – matt

ответ

1

Вы, кажется, думаете, что ваш код работает в следующем порядке:

Visuals.endgameAnimation(winLoseAnimationView, animationFlow: "win"); 
// animation ends 
winLoseAnimationView.image = UIImage(named: "win_00012.png"); 

Но это не так. Анимация требует времени - вот что такое анимация, изменение, которое происходит со временем. Но ваш код не волшебным образом приостанавливается во время анимации: он просто идет прямо. Таким образом, вторая строка, установив изображение, происходит до анимация даже имеет шанс получить начато.

Если вы хотите, чтобы что-то произошло после анимации, сделайте это в обработчике завершения анимации. Вот для чего это (и, следовательно, имя).

(В вашем случае обработчик завершения отсутствует, поскольку вы используете анимацию изображения, но может быть достаточно, чтобы переместить вторую строку до первого. Я не уверен - вам придется попробовать это увидеть)

0

Fixed, изменив порядок:.

@IBAction func selfRightButton(sender: UIButton){ 
    winLoseAnimationView.image = UIImage(named: "win_00012.png"); 
    Visuals.endgameAnimation(winLoseAnimationView, animationFlow "win"); 
} 
Смежные вопросы