2014-09-29 26 views
0

嗨,所以我有一個問題,我不能真正弄清楚原因是什麼。我製作了一個應用程序,它有一個NSToolbar,它具有自定義視圖,以便您可以在工具欄上切換視圖(就像safari的首選項窗口工具欄視圖一樣)。我在YouTube上使用CCodings教程,但我有自己移動的意見的問題,例如我點擊視圖1,當我點擊視圖2查看一個更改和視圖向上移動,以便您只能看到一半的時候我放在視圖上,我使用的是Xcode 6和OS X 10.10,所以我不知道這是否會是一個原因,但是如果您可以幫助我,請繼續閱讀MainWindowController.m文件:NSToolbar自定義視圖

同樣的觀點應該是正確設置

-(NSRect)newFrameForNewContentView:(NSView*)view { 
    NSWindow *window = [self window]; 
    NSRect newFrameRect = [window frameRectForContentRect:[view frame]]; 
    NSRect oldFrameRect = [window frame]; 
    NSSize newSize = newFrameRect.size; 
    NSSize oldSize = oldFrameRect.size; 

    NSRect frame = [window frame]; 
    frame.size = newSize; 
    frame.origin.y -= (newSize.height - oldSize.height); 

    return frame; 

} 

-(NSView *)viewForTag:(int)tag { 

    NSView *view = nil; 
    switch (tag) { 
    case 0: 
    view = smallView; 
    break; 
    case 1: 
    view = mediumView; 
    break; 
    case 2: default: 
    view = largeView; 
    break; 

    } 

    return view; 

} 

- (BOOL)validateToolbarItem:(NSToolbarItem *)item { 

    if ([item tag] == currentViewTag) return NO; 
    else return YES; 
} 

-(void)awakeFromNib { 

    [[self window] setContentSize:[smallView frame].size]; 
    [[[self window] contentView] addSubview:smallView]; 
    [[[self window] contentView] setWantsLayer:YES]; 

} 

-(IBAction)switchView:(id)sender { 
    int tag = [sender tag]; 
    NSView *view = [self viewForTag:tag]; 
    NSView *previousView = [self viewForTag:currentViewTag]; 
    currentViewTag = tag; 

    NSRect newFrame = [self newFrameForNewContentView:view]; 

    [NSAnimationContext beginGrouping]; 

    if ([[NSApp currentEvent] modifierFlags] & NSShiftKeyMask) 
    [[NSAnimationContext currentContext] setDuration:1.0]; 

    [[[[self window] contentView] animator] replaceSubview:previousView with:view]; 
    [[[self window] animator] setFrame:newFrame display:YES]; 

    [NSAnimationContext endGrouping]; 


} 
+0

我的猜測是,您已將窗口的內容視圖設置爲自動調整其子視圖。在動畫過程中,由於窗口大小調整,子視圖會重新定位或調整大小。子視圖正在交換,所以我不清楚哪些會受到自動調整的影響,但其中一個或另一個幾乎肯定是(如果不是兩者)。當你換回時,你不會重新設定框架,所以子視圖會放回到窗口中,但在不同的位置。 – 2014-09-29 02:58:52

+0

感謝您的幫助,但我試圖禁用所有自定義視圖的每個autoresize子視圖,並沒有幫助,所以我開始認爲它可能是一個毛病Xcode 6或我的操作系統謝謝 – Wafflepi 2014-09-29 04:49:13

+0

謝謝你解決了我的問題: ) – Wafflepi 2014-09-30 02:43:59

回答

0

看來你還需要從contenView除了改變NSWidnow框架。 同樣對於我通過點擊事件切換視圖,最好使用NSTabView。