Question

My NSProgressIndicator is animating in a view when I switch to another view ,and switch back my NSProgressIndicator disappear.

why?

Here is my code for switch to another view

    - (void)switchToView:(NSView *)newView withAnimate:(BOOL)animate
{
        if ([[rootView subviews] count] != 0)
        {
            [rootView setWantsLayer:YES];
            [rootView displayIfNeeded];

            NSTimeInterval duration = [[self window] animationResizeTime:newFrame];
            [NSAnimationContext beginGrouping];
            [[NSAnimationContext currentContext] setDuration:0.25];
            [[rootView animator] replaceSubview:[[rootView subviews] objectAtIndex:0] with:newView];
            [NSAnimationContext beginGrouping];
            if (duration > 0.25) {
                [[NSAnimationContext currentContext] setDuration:0.25];
            }
            else{
                [[NSAnimationContext currentContext] setDuration:duration];
            }
            [[[self window] animator] setFrame:newFrame display:YES animate:YES];
            [NSAnimationContext endGrouping];
            [NSAnimationContext endGrouping];

            [self performSelector:@selector(endAnimation) withObject:nil afterDelay:0.25f];
            }


    }

    -(void)endAnimation{
          [[ _mainWindow contentView] setWantsLayer:NO];
    }

I just replace a view,and make a fade out animation NSProgressIndicator animating all the time in a view.

Was it helpful?

Solution

I have solve this by myself ,I think it will be helpful for your guys.

I stop my NSProgressIndicator before I want to replace my view with NSProgressIndicator.

then I replace the view with a new view ,if I switch back I will start NSProgressIndicator with a - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay; method ,just set the delay=0 is OK.

In xib files , you should set NSProgressIndicator DisplayWhenStopped is YES.

And it will work well.

Then reason is after 10.6.5,At least on OS X 10.6.5 and above, as soon as you set an indetermined-progress-indicator's wantsLayer property to YES, the animation stops immediately .

So before it stop immediately ,I stop it by myself.And start it when I want to use it.

NOTICE: You should stop it by yourself better than system does, it can`t work well if system stop it .

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top