带有NSView和子视图的核心动画

时间:2010-05-06 17:50:13

标签: cocoa core-animation

我已经将NSView子类化,以创建一个'容器'视图(我称之为TRTransitionView),该视图用于存放两个子视图。单击按钮,我想使用Core Animation转换类型:kCATransitionPush将一个子视图转换出父视图并转换另一个子视图。在大多数情况下,我的工作正如您所期望的那样(here's a basic test project I threw together)。

我看到的问题与调整窗口大小和然后在我的两个视图之间切换有关。调整窗口大小后,我的子视图将显示在TRTransitionView中看似随机的位置。此外,看起来好像TRTransitionView没有正确拉伸并剪切其子视图的内容。理想情况下,我希望子视图始终锚定在其父视图的左上角,并且还要扩展以扩展父视图的大小。

第二个问题与我在第一个子视图中放置的NSTableView有关。当我的窗口调整大小,并且我的TRTransitionView调整大小以匹配其新尺寸时,我的TableView似乎非常笨拙地调整其内容(整个表似乎摇摆不定)并且表现在占据的新扩展空间似乎“闪烁”(好像在动画的过程中)。很难描述,但有什么方法可以阻止这种情况吗?

这是我的TRTransitionView类:

-(void) awakeFromNib
{
    [self setWantsLayer:YES];
    [self addSubview:[self currentView]];

    transition = [CATransition animation];
    [transition setType:kCATransitionPush];
    [transition setSubtype:kCATransitionFromLeft];

    [self setAnimations: [NSDictionary dictionaryWithObject:transition forKey:@"subviews"]];
}
- (void)setCurrentView:(NSView*)newView
{
    if (!currentView) {
        currentView = newView;
        return;
    }
    [[self animator] replaceSubview:currentView with:newView];

    currentView = newView;
}

-(IBAction) switchToViewOne:(id)sender
{
    [transition setSubtype:kCATransitionFromLeft];
    [self setCurrentView:viewOne];
}
-(IBAction) switchToViewTwo:(id)sender
{
    [transition setSubtype:kCATransitionFromRight];
    [self setCurrentView:viewTwo];
}

0 个答案:

没有答案