2012-11-10 29 views
0

我想在包含瀏覽器的視圖控制器的loadView方法中自動滾動到水平圖像瀏覽器的最右側。當我嘗試這樣做(只是滾動到x = 1000作爲測試),這是行不通的:爲什麼[[NSScrollView documentView] scrollPoint:]在loadView方法中不工作?

- (void)loadView { 
    [super loadView]; 
    // Set initial position 
    [[[self scrollView] documentView] scrollPoint:NSMakePoint(1000.0, 0.0)]; 
} 

但在調試過程中某些時候,我發現這工作:

- (void)loadView { 
    [super loadView]; 
    // Set initial position 
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(scrollToRight) userInfo:nil repeats:NO]; 
} 

其中scrollToRight只是一個實例方法,它和上面做的一樣。

有人知道這是爲什麼嗎?是因爲我在loadView方法中做了嗎? scrollPoint:不能從主線程調用嗎?

更新:我做了一些額外的運行實驗,如預訂至NSViewFrameDidChangeNotificaiton,並基於該滾動,但這並不工作。到目前爲止,我已經能夠讓滾動發生的唯一方式是使用NSTimer,或者通過從父窗口控制器調用視圖控制器的scrollToRight方法。

回答

0

請確保[ [ self scrollView ] documentView ]nil - 它可能仍然爲零。此外,您必須從主線程調用-scrollPoint - 所有AppKit調用必須由主線程完成。

+0

嗯,我試圖設置scrollPoint的documentView不是零。它出現爲。另外,我詢問了線程,因爲它在NSTimer中作爲選擇器方法完成時工作。這是在主線上嗎? – bellkev

+0

@bellkev:取決於您在哪個線程上安排定時器。 (另外,「選擇器方法」沒有意義,選擇器是方法的名稱。) –

相關問題