       noticeView.layer.addAnimation(animation, forKey: "slide out")
       CATransaction.commit()
     } else {
-      complete()
+      dismissed()
     }
 
   }
 
-  func noticeTouched() {
+  @objc private func noticeTouched() {
     dismissCurrentNotice()
   }
 
   public override func layoutSubviews() {
     super.layoutSubviews()
 
-    if let (noticeView, _) = currentNotice {
+    if let (noticeView, _, _) = currentNotice {
       bringSubviewToFront(noticeView)
     }
   }


    if animated {
      CATransaction.begin()
      CATransaction.setCompletionBlock({ completion?() })

      let animation = CABasicAnimation(keyPath: "transform.translation.y")
      animation.duration = 0.25

      view.layer.addAnimation(animation, forKey: "slide in")
      CATransaction.commit()
    } else {
      presented()
    }
  }

  public func dismissCurrentNotice(animated: Bool = true, dismissed: (() -> Void)? = nil) {
    if let (noticeView, position, _) = self.currentNotice
      where noticeView.layer.animationForKey("slide out") == nil
    {
      dismissNotice(noticeView, position: position, animated: animated, dismissed: { dismissed?() })
    }
  }

  public func dismissNotice(noticeView: UIView, position: NoticePosition, animated: Bool = true, dismissed: () -> Void) {

    let complete: () -> () = { [weak self] in
      if let (currentView, _, completion) = self?.currentNotice where currentView == noticeView {
        currentView.removeFromSuperview()
        self?.currentNotice = nil
        completion()
      }

      dismissed()
    }

    if animated {
