我有一個NSView(myView)包裝在NSScrollView(myScrollView)中。使用放大/縮小按鈕,用戶可以改變myView的比例。如果用戶當前正在滾動到myView中的特定位置,我想在縮放發生後將該部分視圖保留在屏幕上。如何在更改比例尺時在NSScrollView中保持滾動位置?
我有代碼看起來像這樣:
// preserve current position in scrollview
NSRect oldVisibleRect = [[myScrollView contentView] documentVisibleRect];
NSPoint oldCenter = NSPointFromCGPoint(CGPointMake(oldVisibleRect.origin.x + (oldVisibleRect.size.width/2.0),
oldVisibleRect.origin.y + (oldVisibleRect.size.height/2.0)));
// adjust my zoom
++displayZoom;
[self scaleUnitSquareToSize:NSSizeFromCGSize(CGSizeMake(0.5, 0.5))];
[self calculateBounds]; // make sure my frame & bounds are at least as big as the visible content view
[self display];
// Adjust scroll view to keep the same position.
NSRect newVisibleRect = [[myScrollView contentView] documentVisibleRect];
NSPoint newOffset = NSPointFromCGPoint(CGPointMake((oldCenter.x * 0.5) - (newVisibleRect.size.width/2.0),
(oldCenter.y * 0.5) - (newVisibleRect.size.height/2.0)));
if (newOffset.x < 0)
newOffset.x = 0;
if (newOffset.y < 0)
newOffset.y = 0;
[[myScrollView contentView] scrollToPoint: newOffset];
[myScrollView reflectScrolledClipView: [myScrollView contentView]];
而且似乎有點接近,但它並不完全正確的,我想不出我做錯了什麼。我的兩個問題是:
1)是不是有一個內置的線沿線的東西:
[myView adjustScaleBy: 0.5 whilePreservingLocationInScrollview:myScrollView];
2)如果沒有,任何人都可以看到我在做什麼錯在我「很長的路要走周圍「的方法,以上?
謝謝!
我想要的效果是:假設我正在看屏幕中間。當我放大(或-out)時,將它保留在屏幕中間。 謝謝! – Olie 2009-09-22 20:57:32
優秀的答案!在將視圖滾動到計算出的原點後,我沒有在滾動條上設置floatValue,而是在我的滾動視圖上調用了reflectScrolledClipView:。這似乎讓滾動條處於正確的位置。不知道這是否正確,因爲這是我創建的第一個Mac應用程序,但它適用於我。 – afarnham 2013-08-13 15:16:45