2016-04-03 11 views
5

Vorrei sapere se è possibile che alcuni pulsanti causino una dissolvenza da un'immagine di sfondo a un'altra? Il seguente codice I risultati in un cambiamento improvviso dall'immagine corrente, background-image-1, alla nuova immagine, background-image-2.È possibile sfumare tra due immagini di sfondo della vista?

func buttonPressed() { 
    if let image = UIImage(named: "background-image-2") { 
     UIView.animateWithDuration(2, delay: 0, options: .CurveEaseInOut, animations: {_ in 
      self.view.backgroundColor = UIColor(patternImage: image) 
     }, completion: nil) 
} 

Grazie

EDIT

Anche se la risposta accettata funziona, stavo trovando lievi difetti quando alterna rapidamente tra le immagini. Un metodo simile utilizzando UIView.animateWithDuration risolve questo:

func buttonPressed() { 
    let oldImageView = UIImageView(image: UIImage(named: "background-image-1")) 
    oldImageView.frame = view.frame 
    let newImageView = UIImageView(image: UIImage(named:"background-image-2")) 
    newImageView.frame = view.frame 
    newImageView.alpha = 0 
    view.insertSubview(newImageView, aboveSubview: backgroundImageView) 
    view.insertSubview(oldImageView, aboveSubview: newImageView) 
    UIView.animateWithDuration(1.0, delay: 0.0, options: .CurveEaseInOut, animations: { 
     oldImageView.alpha = 0 
     newImageView.alpha = 1 
     }, completion: { completed in 
      self.backgroundImageView.image = newImage 
      newImageView.removeFromSuperview() 
      oldImageView.removeFromSuperview() 
    }) 
} 

risposta

6

Dire imageView è UIImageView che si sta utilizzando per l'animazione. image1 è la tua immagine originale. image2 è la nuova immagine. Prova questo:

let crossFade: CABasicAnimation = CABasicAnimation(keyPath: "contents") 
crossFade.duration = 1 
crossFade.fromValue = image1.CGImage 
crossFade.toValue = image2.CGImage 
self.imageView.image = image2 
self.imageView.layer.addAnimation(crossFade, forKey: "animateContents") 

Spero che questo aiuti.

+0

Grazie per il tuo suggerimento. L'ho provato nella sezione ** EDIT ** della domanda. Sfortunatamente, questo non funziona. Qualche suggerimento, per favore? – Alex

+0

Questo perché il tuo imageView non è stato creato correttamente. Nella vista è apparso il metodo, impostare il centro di imageView al centro della vista e le sue dimensioni alle dimensioni della vista. – penatheboss

+0

Questo sì, mi dispiace. Si prega di vedere le modifiche. – Alex

0

Il colore di sfondo si suppone che sia una proprietà animatable, ma un modello di colore non deve lavorare.

Si desidera effettivamente un colore di motivo o lo si sta utilizzando per inserire un'immagine come sfondo della vista senza utilizzare il motivo ripetuto?

+0

Sto usando 'colore modello:' per inserire un'immagine e lo sfondo della vista. L'obiettivo è svanire questa immagine e sostituirla con 'background-image-2'. Grazie – Alex

+1

Sto semplicemente inserendolo come una sottoview e animandolo in quel modo? e.g.http: //stackoverflow.com/questions/25026621/fade-animation-for-uiimages-in-swift – Alex

Problemi correlati