Как сохранить положение прокрутки в NSScrollView при изменении масштаба?
у нас есть NSView (myView), завернутый в NSScrollView (myScrollView). Используя кнопки увеличения / уменьшения, пользователь может изменять масштаб myView. Если пользователь в данный момент прокручивается до определенного места в myView, яЯ хотел бы сохранить эту часть изображения на экране после увеличения.
у нас есть код, который выглядит следующим образом:
// 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) Если нет, может кто-нибудь увидеть, что яделаю неправильно по моемудолгий путь " подход, выше?
Спасибо!