使用animation更改UIWindow图像(使用UIColor patternImage的backgroundColor)

我正在尝试使用两个UIWindow图像(使用backgroundColorUIColor patternImage )之间的animation进行转换。

我有两个图像myImage1myImage2 。 我使用函数changeImage1()更改UIWindow backgroundColor一次,然后再次使用函数changeImage2() 。 我也设置view.backgroundColor = UIColor.clearColor()以便我可以看到UIWindow上发生了什么。 下面的代码。

testingA:

当我将window.backgroundColor = UIColor.redColor()更改window.backgroundColor = UIColor.redColor() window.backgroundColor = UIColor.blueColor() ,在UIWindow之间的animation从红到蓝的颜色之间有一个很好的转换。 (见代码A)

testingB:

然而,当我设置模式图像window.backgroundColor = UIColor(patternImage:...)并调用changeImage1()myImage1animation很好,但是当我然后调用changeImage2()没有animation, myImage2突然取代myImage1 。 (见代码B)

问题:

1 – 如何在myImage1myImage2之间使用UIWindow上的animation进行myImage2

2 – 我在我的代码中错过了什么,只是交换图像,而不是它们之间的animation,为什么myImage1animation,但myImage2不是?

3 – 是否有其他方法来animation两个图像/交叉溶解在UIWindow不使用UIColor(patternImage:…)?

码:

A:

 func changeImage1() { self.view.backgroundColor = UIColor.clearColor() //show UIWindow UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { if let window = UIApplication.sharedApplication().windows.first as UIWindow! { window.backgroundColor = UIColor.redColor() //Animation OK } }, completion: nil) } func changeImage2() { UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { if let window = UIApplication.sharedApplication().windows.first as UIWindow! { window.backgroundColor = UIColor.blueColor() //Animation OK } }, completion: nil) } 

B:

 func changeImage1() { self.view.backgroundColor = UIColor.clearColor() //show UIWindow UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { if let window = UIApplication.sharedApplication().windows.first as UIWindow! { window.backgroundColor = UIColor(patternImage: UIImage(named: "myImage1")!) //Animation OK } }, completion: nil) } func changeImage2() { UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { if let window = UIApplication.sharedApplication().windows.first as UIWindow! { window.backgroundColor = UIColor(patternImage: UIImage(named: "myImage2")!) //NO animation } }, completion: nil) } 

animation意味着一系列中间状态的存在。 两个模式图像之间没有可理解的中间状态概念; 因此,animation(从一个图案图像到另一个)失败。

解决方法可能是animation到颜色,然后在其完成处理程序中,从颜色到下一个模式图像。 但即使这样也会失败 实际上,我很惊讶地听到你的animation从一个颜色到一个图案图像的工作。