1

当我切换到另一个视图时,我的 NSProgressIndicator 正在一个视图中设置动画,然后切换回我的 NSProgressIndicator 消失。

为什么?

这是我切换到另一个视图的代码

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

我只是替换了一个视图,并制作了一个淡出动画 NSProgressIndicator 一直在视图中进行动画处理。

4

1 回答 1

0

我自己解决了这个问题,我认为这对你们会有帮助。

在我想用 NSProgressIndicator 替换我的视图之前,我停止了我的 NSProgressIndicator。

然后我用新视图替换视图,如果我切换回来,我将使用 - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay 启动 NSProgressIndicator;方法,只要设置delay=0就可以了。

在 xib 文件中,您应该将 NSProgressIndicator DisplayWhenStopped 设置为 YES。

它会运作良好。

那么原因是在 10.6.5 之后,至少在 OS X 10.6.5 及更高版本上,一旦你将一个 indetermined-progress-indicator 的 WantsLayer 属性设置为 YES,动画就会立即停止。

所以在它立即停止之前,我自己停止它。并在我想使用它时启动它。

注意:你最好自己停止它而不是系统停止它,如果系统停止它,它就无法正常工作。

于 2013-08-20T02:20:10.523 回答