有没有办法为UIButton的textColor属性设置动画?我找到了一些UILabel文本颜色动画的解决方案,但是UIButton还没有看到任何解决方案。
答案 0 :(得分:16)
使用视图转换
[UIView transitionWithView:backButton
duration:0.5f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
[backButton setTitleColor:[_peacock lighten:d.primary] forState:UIControlStateNormal];
}
completion:^(BOOL finished){
}];
答案 1 :(得分:6)
NSTimer绝对不适合作为动画工具,也不应该用于需要精确度的一般计时(帧率)。这个blog post完美地说明了我对如何处理不可动画的UILabel属性的立场,这些属性应该通过CA而不是NSTimer发送到渲染服务器。您可以使用或包装CATextLayer而不是UILabel,并在标准动画块中为其foregroundColor
属性设置动画。
答案 2 :(得分:1)
回答非常好here。 它基本上使用这个方便的人:
[UIView transitionWithView:duration:options:animations:^()completion:^()];
答案 3 :(得分:0)
显然你需要使用
[UIButton setTitleColor:[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0] forState:UIControlStateNormal];
至于实际让它动画并随时间改变颜色,你需要创建一个NSTimer实例并使用@selector参数指向一个特定的方法来运行。每次计时器运行时,它都会触发该方法,然后更改UIButton的颜色。
[NSTimer scheduledTimerWithTimeInterval:2.0f
target:self
selector:@selector(updateCounter:)
userInfo:nil
repeats:YES];
同时退房: http://servin.com/iphone/iPhone-Timers-and-Animated-Views.html
答案 4 :(得分:0)
您可以使用两个位于相同位置的不同颜色的按钮(或标签等):
byte[] buffer = new byte[Request.InputStream.Length];
Request.InputStream.Read(buffer, 0, buffer.Length);
string data = Encoding.Default.GetString(buffer);
string[] tokens = data.Split(',');
if (tokens.Length > 1)
{
// not sure what I'm doing, trying stuff. BOOOOM!
image = Convert.FromBase64String(tokens[1]);
base64 = Convert.ToBase64String(image);
//string fileName = DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".png";
//string path = Path.Combine(@"D:\www\images", fileName);
//File.WriteAllBytes(path, image);
}
之后,您可以通过button2的过渡动画来获取颜色动画:
button1 = UIButton(frame: frame)
button2 = UIButton(frame: frame) // same frame
button1.setTitleColor(UIColor.redColor(), forState: .Normal) // red
button2.setTitleColor(UIColor.blueColor(), forState: .Normal) // blue
答案 5 :(得分:-2)
这不是一个真正的动画,但它会起作用。
创建一个计时器,其频率与您想要的颜色一样。
让计时器每次触发时调用一个方法changeColorOnButton
。
[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(changeColorOnButton:) userInfo:nil repeats:YES];
创建一个颜色数组colorsArray
(或者提前排列颜色,或者将数组添加到数组中并随机化它们。创建一个int,intForColorInArray
。
在changeColorOnButton方法中,执行以下操作:
- (void) changeColorOnButton:(UIButton *) button {
UIColor *nextColor = [colorsArray objectAtIndex:intForColorArray];
[button.titleLabel.setTextColor:nextColor];
intForColorArray = (intForColorArray +1) % [colorsArray count];
}