2011-09-05 78 views
1

我想弄清楚如何在垂直配置的2視圖NSSplitView中動畫切換(替換)子視圖。我知道了用我的NSSplitView子下面的方法半工作:用Core Animation替換NSSplitView子視圖

要設置動畫:

- (void)awakeFromNib { 
    // set delegate 
    [self setWantsLayer:YES]; 
    CATransition *transition = [CATransition animation]; 
    [transition setType:kCATransitionPush]; 
    [transition setSubtype:kCATransitionFromBottom]; 
    [transition setDuration:1.0]; 
    [self setAnimations:[NSDictionary dictionaryWithObject:transition 
                forKey:@"subviews"]]; 
} 

,並執行它:

- (void)replaceRightView:(NSView *)newView animated:(BOOL)animate { 
    NSRect currentSize = [[[self subviews] objectAtIndex:1] frame]; 
    [newView setFrame:currentSize]; 

    if (animate) { 
     [[self animator] replaceSubview:[[self subviews] objectAtIndex:1] 
            with:newView]; 
    } else { 
     [self replaceSubview:[[self subviews] objectAtIndex:1] 
         with:newView]; 
    } 
} 

然而,這段代碼具有關閉整個NSSplitView的效果,而不僅僅是分割右側的子視圖。

有沒有一種方法來動畫只是子視圖轉換?也許我使用錯誤的動畫鍵(「子視圖」)?其他動畫方法也可以。

謝謝!

回答

1

它可能不是最乾淨的方式,但我最終使用的NSView「容器」子類定製addSubview:replaceSubview:withView:方法是修改新的子視圖的框架相匹配的容器視圖的框架,然後將其結構分爲NSSplitView子視圖我想要動畫。然後,我在容器視圖上設置CATransition,並且一切都按我的意願工作。