                                     position: SwiftyAdsBannerPositition,
                                     animated: Bool = true,
                                     completion: (() -> Void)? = nil) {
+        // We can only animate the banner to its off-screen position with a valid view controller
         guard let viewController = viewController else {
             return
         }
         
+        // We can only animate the banner to its off-screen position if its already visible
+        guard let bannerViewConstraint = bannerViewConstraint, bannerViewConstraint.constant == visibleConstant else {
+            return
+        }
+        
+        // Get banner off-screen constant
         let newConstant: CGFloat
-        
         switch position {
         case .top:
             newConstant = 0 - (bannerAd.adSize.size.height * 3) // *3 due to iPhoneX safe area
         case .bottom:
             newConstant = 0 + (bannerAd.adSize.size.height * 3) // *3 due to iPhoneX safe area
         }
-        
-        guard let bannerViewConstraint = bannerViewConstraint, bannerViewConstraint.constant != newConstant else {
-            return
-        }
-             
+
+        // Only animate the banner if we want it animated
         guard animated else {
             bannerAd.isHidden = true
             bannerViewConstraint.constant = newConstant
             return
         }
         
+        // Animate banner
         bannerViewConstraint.constant = newConstant
         stopCurrentAnimatorAnimations()
         animator = UIViewPropertyAnimator(duration: animationDuration, curve: .easeOut) {

    private var bannerViewConstraint: NSLayoutConstraint?
    private var animator: UIViewPropertyAnimator?
    private var currentView: UIView?
    
    // MARK: - Computed Properties
    

    func animateToOnScreenPosition(_ bannerAd: GADBannerView,
                                   from viewController: UIViewController?,
                                   completion: (() -> Void)? = nil) {
        // We can only animate the banner to its on-screen position with a valid view controller
        guard let viewController = viewController else {
            return
        }
        
        // We can only animate the banner to its on-screen position if its not already visible
        guard let bannerViewConstraint = bannerViewConstraint, bannerViewConstraint.constant != visibleConstant else {
            return
        }
        
        // Animate banner
        bannerAd.isHidden = false
        bannerViewConstraint.constant = visibleConstant
        
        stopCurrentAnimatorAnimations()
        animator = UIViewPropertyAnimator(duration: animationDuration, curve: .easeOut) {
