2014-09-08 49 views
5

Mam wiele kart w mojej aplikacji. i jeden kontroler widoku jest uruchomiony animacja, kiedy przełączam się do innego kontrolera widoku, i znowu przychodzi zobaczyć kontroler z animacją, a następnie animacja zatrzymuje się,dlaczego zmiana karty, zatrzymanie animacji w aplikacji ios?

może ktoś poprowadzi mnie do pracy moim Xcode nawet przełączanie zakładki w aplikacji 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

jest 'viewWillAppear:' metoda jest tam w zakładce animacji? – sreekanthk

+0

nawet pisanie kodu w viewWillAppear zatrzymuje animację, –

+0

za każdym razem, gdy zmienisz kartę i powrócisz na tę samą kartę, zostanie wywołana metoda 'viewWillAppear:', a widok wróci do normalnej postaci. – sreekanthk

Odpowiedz

10

odpowiedź i potrzebne było

drawAnimation.removedOnCompletion=NO;