2010-09-30 3 views
0

je le code suivantde animateWithDuration de UIView: animations: achèvement: erreur

-(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); }]; 
    } 
} 

mais obtenir un incrément d'erreur de lecture seule variable stateTemp

Je suis en train d'animer une série d'images en définissant un UIButton s image.

Quel est le problème avec ce code?

Répondre

4

Toute variable utilisée à l'intérieur d'un bloc est copiée const. Alors, vraiment ce que vous avez en cours est le suivant:

-(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); 
    } 
]; 
} 
} 

Le problème tente de modifier une variable const. Tu ne peux pas faire ça. Heureusement, il existe un moyen de contourner cela, et c'est avec le spécificateur __block.

Il suffit de changer int stateTemp = state; en __block int stateTemp = state; et vous serez prêt à partir. (Pour la documentation sur __block, consultez the documentation)

Questions connexes