嘿我在我的iOS应用程序中实现了一个按钮闪烁的功能,如果设置了某个参数则停止该功能。我丢失了所有应用程序数据并记录了所有内容,但我正在努力找出我现在遇到的问题。
我的方法如下:
- (void)toggleButtonImage:(NSTimer*)timer
{
toggle = !toggle; // is a bool
for(int x=0;x<9;x++){
for (int y=0;y<9;y++){
if(toggle==true){
if (blinks[x][y]==1){
[buttons[x][y] setBackgroundImage:[UIImage imageNamed:@"loading"] forState: UIControlStateNormal];
}
}
else if (toggle==false) {
[buttons[x][y] setBackgroundImage:[UIImage imageNamed:@"newmask"] forState:UIControlStateNormal];
}
}
}
}
所有按钮都在一种表中,方法遍历所有按钮,检查按钮的blinks
数组是否设置为1,如果是,则将暗图像设置为背景。在每次运行时,无论blinks
说什么,它都会将按钮的图片设置为&#34; newmask&#34;。
因此,如果blinks
为1,则按钮始终在&#34; newmask&#34;之间切换。和#34; loading&#34;。
然而,大约50%的按钮卡在loading
图片上,以后甚至不会刷新,就像被忽略一样。我确信我在这里错过了一些简单的逻辑,但它可能是什么?再次将blinks
设置为1可以让另外50%的机会最终将按钮设置为&#34; newmask&#34;,但是,与往常一样,只有50%的几率将按钮设置为&#34;为newmask&#34;将blinks
设置为0后。
答案 0 :(得分:0)
我认为它与被覆盖的主队列有关。但是,我现在写了这个方法:
- (void)toggleButtonImage:(NSTimer*)timer
{
if(go) fl=fl-1;
else fl++;
if(fl>4) go=true;
if(fl<2) go=false;
for(int x=0;x<kButtonColumns;x++){
for (int y=0;y<kButtonRows;y++){
if(blinks[x][y]==1) // if(toggle)
{
[buttons[x][y] setAlpha:0.2*fl];
}
else {
[buttons[x][y] setAlpha:1.0];
}
}
}
toggle = !toggle;
}
我的刷新率为0.08秒,帧速率为12.5fps,这是性能和外观之间的坚实折衷。另外,每次有人按下按钮时,我都会设置方向(bool go)和int fl的起始值,这样用户就能感觉到实际控制动画。
- (void) sete{
fl=6;
go=true;
}
- (IBAction)actionPick:(id)sender
{
[self sete];
...