我有一个UIView,我想改变它的背景颜色。使用UIView beginAnimation:context:
方法很有效。然而,动画'持续'大约1秒左右。我希望它持续5秒。这是我正在使用的代码:
- (void)updateSky:(NSString *)time {
[UIView beginAnimations: @"backgroundUpdate" context:nil];
[UIView setAnimationDuration: 5.0];
gradient.colors = [NSArray arrayWithObjects: (id)[[UIColor colorWithRed:0x63/255.0f green:0xA9/255.0f blue:0xFF/255.0f alpha:1.0] CGColor],
(id)[[UIColor colorWithRed:0x8C/255.0f green:0xBF/255.0f blue:0xFF/255.0f alpha:1.0] CGColor], nil];
if(time == @"night") {
gradient.colors = [NSArray arrayWithObjects: (id)[[UIColor colorWithRed:0x1E/255.0f green:0x1E/255.0f blue:0x1E/255.0f alpha:1.0] CGColor],
(id)[[UIColor colorWithRed:0x2C/255.0f green:0x4C/255.0f blue:0x72/255.0f alpha:1.0] CGColor], nil];
}
[UIView commitAnimations];
}
gradient
定义如下:
CAGradientLayer *gradient;
我做错了吗?
答案 0 :(得分:1)
使用视图动画设置UIView背景颜色的动画方法是设置其backgroundColor
属性。你似乎没有这样做。这件事gradient
是什么,它的colors
属性是什么?这里的问题似乎是你正在使用UIView动画,但是colors
不是UIView可动画属性,所以这没有任何意义。您需要提供更多代码来显示您真正在做的事情。例如,如果这是隐式图层动画,则使用+[CATransaction setAnimationDuration:]
来设置持续时间。
(同样,整个beginAnimations
/ commitAnimations
结构虽然没有完全弃用,但实际上是在砧板上。这与你的问题无关,但如果你离开它会很好原则上你应该使用animateWithDuration:delay:options:animations:completion:
,隐式图层动画或显式核心动画。)