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

时间:2016-03-14 16:54:16

标签: ios swift uiimage uicolor uiwindow

我正尝试在两张UIWindow张图片之间转换动画(使用backgroundColor设置UIColor patternImage

我有两张图片myImage1myImage2。我使用函数UIWindow更改backgroundColor changeImage1(),然后再使用函数changeImage2()。我还设置了view.backgroundColor = UIColor.clearColor(),以便我可以看到UIWindow上发生了什么。代码如下。

测试A:

当我将window.backgroundColor = UIColor.redColor()更改为window.backgroundColor = UIColor.blueColor()时,我会在UIWindow之间获得一个很好的过渡,颜色为红色到蓝色。 (见代码A。)

测试B:

但是,当我设置模式图片window.backgroundColor = UIColor(patternImage:...)并调用changeImage1()时,myImage1会很好地设置动画,但是当我调用changeImage2()时没有动画时,{{1} }突然取代myImage2。 (见代码B。)

问题:

1 - 如何在myImage1myImage1之间的UIWindow上转换动画?

2 - 我的代码中缺少什么只是交换图像而不是动画,为什么myImage2动画但myImage1不是?

3 - 是否有其他方法可以在不使用UIColor的myImage2上设置两个图像/交叉溶解(patternImage:...)?

代码:

A:

UIWindow

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

1 个答案:

答案 0 :(得分:1)

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

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