         moveDown()
     }
 
-    private func moveUp() {
-        toggleContentInteraction(enabled: true)
-        view.setVerticalPoint(to: size.height, duration: ClapprAnimationDuration.mediaControlShow)
+    private func moveUp(with duration: TimeInterval = ClapprAnimationDuration.mediaControlShow) {
+        guard let superview = view.superview else { return }
+
+        topDistanceFromBottom.constant = (overlayViewFrame.height / 2) * -1
+        UIView.animate(withDuration: duration) {
+            superview.layoutIfNeeded()
+        }
     }
 
     private func moveDown(with duration: TimeInterval = ClapprAnimationDuration.mediaControlHide) {
-        toggleContentInteraction(enabled: false)
-        view.setVerticalPoint(to: hiddenHeight, duration: duration)
+        guard let superview = view.superview else { return }
+
+        topDistanceFromBottom.constant = placeholder * -1
+        UIView.animate(withDuration: duration) {
+            superview.layoutIfNeeded()
+        }
     }
 
     private func toggleContentInteraction(enabled: Bool) {

        return .bottom
    }

    override var size: CGSize {
        return CGSize(width: coreViewFrame.width, height: min(maxHeight, height))
    }

    private var minYToShow: CGFloat {
        return coreViewFrame.height * 0.75
    }

    private var hiddenHeight: CGFloat {
        return coreViewFrame.height - placeholder
    }

    required public init(context: UIObject) {
        super.init(context: context)

        addGesture(UITapGestureRecognizer(target: self, action: #selector(didTapView)), cancelingTouchesInView: false)
        addGesture(UIPanGestureRecognizer(target: self, action: #selector(onDragView)))
    }

    override open func render() {
        super.render()

        adjustSize()
        moveDown(with: .zero)
        adjustInitialPosition()
    }

    private func adjustSize() {
        view.frame.size = size
    }

    private func adjustInitialPosition() {
        initialCenterY = view.center.y
    }

    override open func onDrawerShow() {

    private var maxHeight: CGFloat {
        return overlayViewFrame.height/2
    }

    private var minHeightToShow: CGFloat {
        return overlayViewFrame.height * 0.25
    }

    open var height: CGFloat {
