Синхронизация двух NSScrollView

nsscrollview
swift

#1

Есть два NSScrollView и при прокрутке первого синхронно должен прокручивайся второй. Нашел от apple документ для Objective-C. https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/NSScrollViewGuide/Articles/SynchroScroll.html

Стопор в переводе на swift возник на следующих строчках.

Как правильно записать в swift:

// get the changed content view from the notification
NSClipView *changedContentView=[notification object];

а также

// get the origin of the NSClipView of the scroll view that
// we're watching
NSPoint changedBoundsOrigin = [changedContentView documentVisibleRect].origin;;

Update. Стопор убрал, но не закончил. Посмотрим что в конце получится. Если все ок напишу код здесь.


Как синхронизировать горизонтальный скроллинг у двух NSTextView, для OSX ?
Синхронный скролл двух Collection View
#2

Итак, swift код для синхронизации двух NSScrollView внизу. Все работает.

class SynchroScrollView: NSScrollView
{
    var synchronizedScrollView = NSScrollView()

    func setSynchronizedScrollView(scrollview: NSScrollView)
    {
        self.stopSynchronizing()
    
        synchronizedScrollView = scrollview
    
        var synchronizedContentView = NSView()
        synchronizedContentView = synchronizedScrollView.contentView
    
    
         NotificationCenter.default().addObserver(self, selector: #selector(SynchroScrollView.synchronizedViewContentBoundsDidChange(_:)), name: NSNotification.Name.NSViewBoundsDidChange, object: synchronizedContentView)
    }
    
    func synchronizedViewContentBoundsDidChange(_ notification: Notification)
    {
        let changedContentView = notification.object
        let changedBoundsOrigin = changedContentView?.documentVisibleRect.origin
    
        let curOffset = self.contentView.bounds.origin
        var newOffset = curOffset
    
        newOffset.y = (changedBoundsOrigin?.y)!
    
        if !NSEqualPoints(curOffset, changedBoundsOrigin!)
       {
             self.contentView.scroll(to: newOffset)
            self.reflectScrolledClipView(self.contentView)
        }
    }

     func stopSynchronizing()
    {
        if synchronizedScrollView.isEqual(nil) == false
        {
            let synchronizedContentView = synchronizedScrollView.contentView
        
            NotificationCenter.default().removeObserver(self, name: NSNotification.Name.NSViewBoundsDidChange, object: synchronizedContentView)
        synchronizedScrollView = NSScrollView()
        }
    }
}

#3

Помогите разобраться. Работавший выше код в Xcode 8 бетта теперь в Xcode 8 не работает. Программа выключается когда текст при печати превышает видимую часть и должен скроллиться. Выдает ошибку в следующей строчке

let changedBoundsOrigin = (changedContentView as AnyObject).documentVisibleRect.origin

#4

Мда. Optional, optional …

Теперь надо использовать ! с changedContentView

let changedBoundsOrigin = (changedContentView! as AnyObject).documentVisibleRect.origin