变量不可赋值(缺少__block类型说明符)

时间:2016-04-13 22:03:21

标签: objective-c

我的代码中有一个错误,我无法修复.. 这是我的代码..它在current_region++发生的第一个if语句中...请帮帮我,谢谢

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

1 个答案:

答案 0 :(得分:1)

当您声明current_region变量时,您需要修改声明,如下所示:

__block int current_region = 0;

Apple says

  

__块变量存在于变量的词法范围与声明的所有块和块副本之间共享的存储中   在变量的词法范围内创建。因此,存储将   如果块的任何副本,则在堆栈帧的破坏中存活   在框架内声明超出框架的末尾(for   例如,通过在某处加入队伍以便以后执行)。多   给定词法范围内的块可以同时使用共享   变量