views:

32

answers:

1

When the user navigates to a different view and returns back to the original view I would like everything to be reset as though they were coming to the view for the first time.

I was able to stop the audio from playing when they leave, but not an animation method. how would I be able to do this?

-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
        [audioIntro stop];
        [mainAudio stop];
}

here's the animation code:

- (void) firstAnimation {

        if (playSoundButton.enabled = NO || audioIntro.playing) {
                return;
        }

        UIViewAnimationOptions options = UIViewAnimationOptionCurveLinear;
        myImage.hidden = NO;
        myImage.alpha = 1.0;

        [UIView animateWithDuration:1.0 delay:12.0 options:options animations:^ 
        {
            setAnimationBeginsFromCurrentState:YES;

                tapImage.alpha = 0.0;

        }

                completion:^(BOOL finished){


        [self performSelector:@selector(secondAnimation) withObject:nil afterDelay:0.2];
        }
         ];
}

thanks for any help.

+1  A: 

It seems a bit hacky - but I would try this:

  1. Use the "old style" animation - i.e. not with blocks - use "beginAnimation", setting an animationID for your animation.

  2. In you viewWillDisappear method, call "beginAnimation" again, with the same animationID, but this time:

    a. Set the animation duration to ZERO b. Animate "to" the location where you want the stuff to reset to.

  3. Set some sort of kill-flag in the viewWillDisappear method

  4. Make the completion function look for the "kill flag" - and do not evoke the second animation inside your "secondAnimation" flag if the selector if the "kill flag" is set.

(I am a little unclear - if the "finished" flag would suffice for the "kill-flag" - not having seen your entire code.

Brad