2016-04-03 49 views
5

我想知道是否有可能使某个按钮导致从一个背景图像淡入到另一个背景图像?下面的代码导致我从当前图像background-image-1突然改变为新图像background-image-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) 
} 

感谢

编辑

虽然接受的答案没有工作,我在图像之间快速切换时发现轻微毛刺。使用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

感谢您的建议。我试图在我的**编辑**部分的问题。不幸的是,这不起作用。任何建议为什么,请吗? – Alex

+0

这是因为您的imageView没有正确创建。在视图确实出现的方法中,将imageView的中心设置为视图的中心,并将其大小设置为视图的大小。 – penatheboss

+0

是的,发现了,对不起。请参阅修改。 – Alex

0

的背景颜色被认为是一个动画的属性,但图案颜色必须不工作。

实际上是否需要图案颜色,或者是否使用该颜色作为视图的背景插入图像而不使用重复图案?

+0

我使用'图案颜色:'为了插入图像和视图的背景。目的是淡出这个图像,并用'background-image-2'代替它。谢谢 – Alex

+1

我最好只是将它作为子视图插入并以此方式进行动画制作?例如http://stackoverflow.com/questions/25026621/fade-animation-for-uiimages-in-swift – Alex