 
         init() {
             super.init(itemView: UIView())
+            scrollView.scrollable = self
             view.addSubview(scrollView)
-            delegate.scrollable = self
         }
 
-        override func onPointerPress(_ x: CGFloat, _ y: CGFloat) {
-            super.onPointerPress(x, y)
-            guard contentItem != nil else { return }
-            scrollView.contentSize = contentItem!.view.layer.bounds.size
-            scrollView.delegate = delegate
+        func animatedScrollTo(_ x: CGFloat, _ y: CGFloat) {
+            scrollView.setContentOffset(CGPoint(x: x, y: y), animated: true)
         }
     }
 }

                (item: ScrollableItem, val: CGFloat) in
                item.scrollView.contentOffset.y = val
            }
        }

        class Delegate: UIViewController, UIScrollViewDelegate {
            weak var scrollable: ScrollableItem?

            func scrollViewDidScroll(_ scrollView: UIScrollView) {
                guard scrollable != nil else { return }
                let offset = scrollView.contentOffset
                scrollable!.pushEvent(event: "contentXChange", args: [offset.x])

            }
        }

        let scrollView = NeftUIScrollView()

        var contentItem: Item? {
            didSet {
