Как сохранить положение прокрутки в 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) Если нет, то может ли кто-нибудь увидеть, что я делаю неправильно в моем подходе "обходного пути" выше?

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос