使用animation更改UIWindow图像(使用UIColor patternImage的backgroundColor)
我正在尝试使用两个UIWindow
图像(使用backgroundColor
与UIColor
patternImage
)之间的animation进行转换。
我有两个图像myImage1
和myImage2
。 我使用函数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()
, myImage1
animation很好,但是当我然后调用changeImage2()
没有animation, myImage2
突然取代myImage1
。 (见代码B)
问题:
1 – 如何在myImage1
和myImage2
之间使用UIWindow上的animation进行myImage2
?
2 – 我在我的代码中错过了什么,只是交换图像,而不是它们之间的animation,为什么myImage1
animation,但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从一个颜色到一个图案图像的工作。