2016-04-13 2 views
0

У меня есть ошибка в моем коде, который я не могу исправить .. вот мой код .. он находится внутри первого оператора if, где встречается current_region++ ... пожалуйста, помогите мне, спасибопеременная не назначается (отсутствует спецификатор типа __block)

-(void)planetRotation:(UIView *)planet average:(float)time1 perihelion:(float)time2 aphelion:(float)time3 region:(int) current_region 
{ 
    current_region = 0; 

    [planet.layer removeAllAnimations]; 

    if (current_region == 0 || current_region == 2) 
    { 
     [UIView animateWithDuration:time1 delay:0.0 options: UIViewAnimationOptionTransitionNone 
     animations: ^{ CABasicAnimation* rotationAnimation; 
         rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
         rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * time1 * 1 ];//multiply more to add speed 
         rotationAnimation.duration = time1/4; 
         rotationAnimation.cumulative = YES; 
         rotationAnimation.repeatCount = HUGE_VALF; 
      [planet.layer addAnimation:rotationAnimation forKey:@"orbit"];} completion:^(BOOL finished){current_region++; }]; 
    } 
    else if(current_region == 1) 
    { 
     [UIView animateWithDuration:time2 delay:0.0 options: UIViewAnimationOptionTransitionNone 
     animations:^{ CABasicAnimation* rotationAnimation; 
         rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
         rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * time2 * 1 ];//multiply more to add speed 
         rotationAnimation.duration = 15; 
         rotationAnimation.cumulative = YES; 
         rotationAnimation.repeatCount = HUGE_VALF; 
      [planet.layer addAnimation:rotationAnimation forKey:@"orbit"];} completion:^(BOOL finished){ }]; 
    } 
    else if(current_region == 3) 
    { 
     [UIView animateWithDuration:time3 delay:0.0 options: UIViewAnimationOptionTransitionNone 
      animations:^{ CABasicAnimation* rotationAnimation; 
         rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
         rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * time3 * 1 ];//multiply more to add speed 
         rotationAnimation.duration = 15; 
         rotationAnimation.cumulative = YES; 
         rotationAnimation.repeatCount = HUGE_VALF; 
      [planet.layer addAnimation:rotationAnimation forKey:@"orbit"];} completion:^(BOOL finished){ }]; 
    } 

ответ

0

Когда вы объявляете вашу current_region переменную, которую необходимо изменить декларацию, как это:

__block int current_region = 0; 

Apple says:

Переменные __block хранятся в хранилище, которое разделяется между лексической областью переменной и всеми объявленными блоками и объявленными блоками или , созданными в лексической области переменной. Таким образом, хранилище будет выживать при уничтожении кадра стека, если любые копии блоков , объявленные в рамках кадра, выходят за пределы кадра (для примера , будучи помещенным в место где-то для последующего исполнения). Несколько блоков в данной лексической области могут одновременно использовать общую переменную .

Смежные вопросы