UIView的animateWithDuration:动画:完成:错误

时间:2010-09-30 15:04:06

标签: iphone uibutton

我有以下代码

-(void) animate:(UIButton*) b withState: (int) state andLastState:(int) last_state {
 if (state < last_state) {
     int stateTemp = state;
     float duration = 1.0 / 30.0;
     [b animateWithDuration: duration
         animations: ^{ [UIImage imageNamed:[NSString stringWithFormat:@"m1.a000%d.png", state]]; }
    completion: ^{ animate(b, stateTemp++, last_state); }];
     }
}

但获得只读变量stateTemp

的错误增量

我试图通过设置UIButton图像为一系列图像添加动画效果。

此代码有什么问题?

1 个答案:

答案 0 :(得分:4)

块内使用的任何变量都是const复制的。所以你真正发生的事情是:

-(void) animate:(UIButton*) b withState: (int) state andLastState:(int) last_state {
if (state < last_state) {
 int stateTemp = state;
 float duration = 1.0 / 30.0;
 [b animateWithDuration: duration
     animations: ^{
      [UIImage imageNamed:[NSString stringWithFormat:@"m1.a000%d.png", state]];
     }
     completion: ^{
      const int stateTempCopy = stateTemp;
      animate(b, stateTempCopy++, last_state); 
     }
 ];
 }
}

问题是尝试更改const变量。你不能这样做。幸运的是,有一种解决方法,那就是__block说明符。

只需将int stateTemp = state;更改为__block int stateTemp = state;,您就可以开始了。 (有关__block的文档,请查看the documentation