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];
}
我的猜測是,您已將窗口的內容視圖設置爲自動調整其子視圖。在動畫過程中,由於窗口大小調整,子視圖會重新定位或調整大小。子視圖正在交換,所以我不清楚哪些會受到自動調整的影響,但其中一個或另一個幾乎肯定是(如果不是兩者)。當你換回時,你不會重新設定框架,所以子視圖會放回到窗口中,但在不同的位置。 – 2014-09-29 02:58:52
感謝您的幫助,但我試圖禁用所有自定義視圖的每個autoresize子視圖,並沒有幫助,所以我開始認爲它可能是一個毛病Xcode 6或我的操作系統謝謝 – Wafflepi 2014-09-29 04:49:13
謝謝你解決了我的問題: ) – Wafflepi 2014-09-30 02:43:59