我有以下代码
-(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
图像为一系列图像添加动画效果。
此代码有什么问题?
答案 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)