Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open class func setupHardwareInputAccessoryView(_ storyTextNode: StoryTextNode, textView: UITextView, notification: Notification) {
- textView.inputAccessoryView?.isHidden = true
- let textEditDoneViewHeight: CGFloat = 42
- let textOptionsViewHeight: CGFloat = 210
- let inputAccessoryView = UIView()
- // https://forums.developer.apple.com/message/317221#317221
- inputAccessoryView.tag = hardwareInputAccessoryViewTag
- inputAccessoryView.backgroundColor = .clear
- inputAccessoryView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: textEditDoneViewHeight + textOptionsViewHeight)
- textView.inputAccessoryView = inputAccessoryView
- textView.reloadInputViews()
- let foundationView = UIView()
- foundationView.backgroundColor = .yellow
- if !HardwareKeyboardManager.shared.needsAnimation {
- foundationView.frame = inputAccessoryView.frame
- let textOptionsView = UINib(nibName: TextOptionsView.defaultReuseIdentifier, bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! TextOptionsView
- textOptionsView.delegate = storyTextNode
- textOptionsView.frame = CGRect(x: 0, y: textEditDoneViewHeight, width: foundationView.frame.width, height: textOptionsViewHeight)
- foundationView.addSubview(textOptionsView)
- let textEditAccesoryView = UINib(nibName: TextEditAccesoryView.defaultReuseIdentifier, bundle: .main).instantiate(withOwner: nil, options: nil)[0] as! TextEditAccesoryView
- textEditAccesoryView.isSoftwareKeyboard = false
- textEditAccesoryView.frame = CGRect(x: 0, y: 0, width: foundationView.frame.width, height: textEditDoneViewHeight)
- foundationView.addSubview(textEditAccesoryView)
- textView.inputAccessoryView?.addSubview(foundationView)
- textEditAccesoryView.doneTappedClosure = {
- textView.endEditing(true)
- }
- textView.inputAccessoryView?.isHidden = false
- return
- }
- // with animation
- textView.inputAccessoryView?.isHidden = false
- HardwareKeyboardManager.shared.needsAnimation = false
- guard let duration = notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? Double else { return }
- guard let curve = notification.userInfo?[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber else { return }
- let textOptionsView = UINib(nibName: TextOptionsView.defaultReuseIdentifier, bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! TextOptionsView
- textOptionsView.delegate = storyTextNode
- let textEditAccesoryView = UINib(nibName: TextEditAccesoryView.defaultReuseIdentifier, bundle: .main).instantiate(withOwner: nil, options: nil)[0] as! TextEditAccesoryView
- textEditAccesoryView.isSoftwareKeyboard = false
- foundationView.frame = CGRect(x: 0, y: inputAccessoryView.frame.height, width: inputAccessoryView.frame.width, height: inputAccessoryView.frame.height)
- textOptionsView.frame = CGRect(x: 0, y: textEditDoneViewHeight, width: foundationView.frame.width, height: textOptionsViewHeight)
- textEditAccesoryView.frame = CGRect(x: 0, y: 0, width: foundationView.frame.width, height: textEditDoneViewHeight)
- textView.inputAccessoryView?.addSubview(foundationView)
- foundationView.addSubview(textOptionsView)
- foundationView.addSubview(textEditAccesoryView)
- textEditAccesoryView.doneTappedClosure = {
- textView.endEditing(true)
- }
- Timer.scheduledTimer(withTimeInterval: 0.57, repeats: false) { (_) in
- DispatchQueue.main.async {
- UIView.animate(withDuration: duration, delay: 0, options: UIViewAnimationOptions(rawValue: UInt(truncating: curve)), animations: {
- foundationView.frame = CGRect(x: 0, y: 0, width: inputAccessoryView.frame.width, height: inputAccessoryView.frame.height)
- }, completion: { (_) in
- })
- }
- }
- }
Add Comment
Please, Sign In to add comment