2016-04-03 5 views
5

あるボタンがある背景画像から別の背景画像にフェードする可能性があるかどうかを知りたいですか?次のコードは、現在の画像background-image-1から新しい画像background-image-2への突然の変更をもたらします。2つのビュー背景画像の間でフェードすることはできますか?

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) 
} 

おかげ

EDIT

受け入れ答えが作業を行いますが、私はわずかなグリッチを見つけることだった画像間の迅速トグルとき。 UIView.animateWithDurationを用いて同様の方法は、これを解決:

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() 
    }) 
} 

答えて

6

セイimageViewは、あなたのアニメーションに使用しているUIImageViewです。 image1は元の画像です。 image2は新しい画像です。試してみてください:

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") 

希望します。

+0

ご意見ありがとうございます。私はその問題の** EDIT **セクションでそれを試みました。残念ながら、これは動作しません。理由は何ですか? – Alex

+0

これは、imageViewが正しく作成されなかったためです。ビューが表示されたメソッドでは、imageViewの中心をビューの中心に設定し、そのサイズをビューのサイズに設定します。 – penatheboss

+0

うん、それは、ごめんなさい。編集内容をご覧ください。 – Alex

0

背景色をアニメーション化性であることが想定されるが、パターンの色が動作してはなりません。

実際にパターンの色が欲しいのですか、または繰り返しパターンを使用せずに画像を背景の中に挿入するために使用していますか?

+0

イメージとビューの背景を挿入するために 'pattern color:'を使用しています。目的は、このイメージをフェードアウトし、 'background-image-2 'に置き換えることです。ありがとう – Alex

+1

私はちょうどそれをサブビューとして挿入し、そのようにアニメーション化していますか?例:http://stackoverflow.com/questions/25026621/fade-animation-for-uiimages-in-swift – Alex