2014-09-08 19 views
5

Ho più schede nella mia app. ho un controller di visualizzazione c'è animazione in esecuzione, quando passo a un altro controller di visualizzazione, e di nuovo arriva a visualizzare il controller con animazione, quindi l'animazione si ferma,perché cambiare scheda, interrompere l'animazione in app ios?

qualcuno può guidarmi a lavorare il mio Xcode anche passando da una scheda all'app Iphone ?

- (IBAction)btn:(id)sender { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSString *soundStatus = [defaults objectForKey:@"Sound_Swich"]; 
    //NSLog(@"soundstatus is %@ ", soundStatus); 
    if([soundStatus isEqual:@"YES"]) 
    { 
     [self soundEffect]; 
    } 
    if ([btnpress isEqualToString:@"start"]) { 

     btnpress= @"pause"; 

     int radius = 100; 
     circle = [CAShapeLayer layer]; 

     circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius) 
               cornerRadius:radius].CGPath; 

     circle.fillColor = [UIColor clearColor].CGColor; 
     circle.strokeColor = [UIColor greenColor].CGColor; 

     circle.lineWidth = 5; 
     [imgview.layer addSublayer:circle]; 



     // Configure animation 
     drawAnimation= [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; 
     drawAnimation.duration   = 5.0; // "animate over 10 seconds or so.." 
     drawAnimation.repeatCount   = 8.0; // Animate only once.. 
     // Animate from no part of the stroke being drawn to the entire stroke being drawn 
     drawAnimation.fromValue = [NSNumber numberWithFloat:0.0f]; 
     drawAnimation.toValue = [NSNumber numberWithFloat:1.0f]; 

     // Experiment with timing to get the appearence to look the way you want 
     drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 

     // Add the animation to the circle 
     [circle addAnimation:drawAnimation forKey:@"drawCircleAnimation"]; 
     timerWasStarted=YES; 
     //totalSeconds = 120; 
     totalSeconds = 10; 
     twoMinTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f 
                 target:self 
                selector:@selector(timer) 
                userInfo:nil 
                 repeats:YES]; 

     // NSLog(@"start %@",[NSDate date]); 
    }// to pause animation and timer 
    else if ([btnpress isEqualToString:@"pause"]){ 
     flag=1; 
     [email protected]"resume"; 
     pauseStart = [NSDate dateWithTimeIntervalSinceNow:0]; 
     previousFireDate = [twoMinTimer fireDate]; 
     [twoMinTimer setFireDate:[NSDate distantFuture]]; 
     // NSLog(@"pause %@",[NSDate date]); 
     [self pauseLayer:circle]; 


    }// to resume animation and timer 

    else if([btnpress isEqual:@"resume"]&&flag==1){ 
     btnpress= @"pause"; 
     float pauseTime = -1*[pauseStart timeIntervalSinceNow]; 
     [twoMinTimer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]]; 
     [self resumeLayer:circle]; 
    } 

    - (void)pauseLayer:(CALayer *)layer 
    { 

     pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; 
     layer.speed = 0.0; 
     layer.timeOffset = pausedTime; 
     //NSLog(@"pauseoffset %f",pausedTime); 
    } 

    - (void)resumeLayer:(CALayer *)layer 
    { 
     // NSLog(@"resume %@",[NSDate date]); 

     CFTimeInterval pausedTime1 = [layer timeOffset]; 
     layer.speed = 1.0; 
     layer.timeOffset = 0.0; 
     layer.beginTime = 0.0; 
     timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime1; 
     layer.beginTime = timeSincePause; 

     //NSLog(@"resume offset %f",[layer timeOffset]); 
    } 
+0

è 'viewWillAppear:' metodo è lì nella scheda di animazione? – sreekanthk

+0

anche la scrittura del codice in viewWillAppear interrompe l'animazione, –

+0

ogni volta che si cambia la scheda e si ritorna alla stessa scheda, verrà chiamato il metodo 'viewWillAppear:' e la vista tornerà alla sua forma normale. – sreekanthk

risposta

10

risposta che mi serviva era

drawAnimation.removedOnCompletion=NO;