我已经将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];
}