java用键盘移动图片_使用swift 3使用键盘移动视图

您必须观察键盘框架中的更改并相应地操作以在键盘上方显示您的uiview(uitextfield,uitextview等) .

以下是视图控制器的快速示例:

import UIKit

class ExampleViewController: UIViewController {

// MARK: - Properties

@IBOutlet weak var exampleTextView1: UITextView!

@IBOutlet weak var exampleTextView2: UITextView!

@IBOutlet weak var exampleTextView1BottomConstraint: NSLayoutConstraint!

@IBOutlet weak var exampleTextView2BottomConstraint: NSLayoutConstraint!

var exampleTextView1BottomConstraintInitialConstant: CGFloat!

var exampleTextView2BottomConstraintInitialConstant: CGFloat!

var keyboardVisibilityObservers: [NSObjectProtocol] = []

// MARK: - View lifecycle

override func viewDidLoad() {

super.viewDidLoad()

exampleTextView1BottomConstraintInitialConstant = exampleTextView1BottomConstraint.constant

exampleTextView2BottomConstraintInitialConstant = exampleTextView2BottomConstraint.constant

}

override func viewWillAppear(_ animated: Bool) {

super.viewWillAppear(animated)

// Add observers for text view 1

keyboardVisibilityObservers.append(createShowKeyboardObserver(keyboardTrigger: exampleTextView1, distance: 10.0, constraint: exampleTextView1BottomConstraint))

keyboardVisibilityObservers.append(createHideKeyboardObserver(keyboardTrigger: exampleTextView1, constraint: exampleTextView1BottomConstraint, initialConstraintConstant: exampleTextView1BottomConstraintInitialConstant))

// Add observers for text view 2

keyboardVisibilityObservers.append(createShowKeyboardObserver(keyboardTrigger: exampleTextView2, distance: 10.0, constraint: exampleTextView2BottomConstraint))

keyboardVisibilityObservers.append(createHideKeyboardObserver(keyboardTrigger: exampleTextView2, constraint: exampleTextView2BottomConstraint, initialConstraintConstant: exampleTextView2BottomConstraintInitialConstant))

}

override func viewWillDisappear(_ animated: Bool) {

super.viewWillDisappear(animated)

removeAllKeyboardVisibilityNotificationObservers()

}

// MARK: - Keyboard event handling

private func createShowKeyboardObserver(keyboardTrigger: UIView, distance: CGFloat, constraint: NSLayoutConstraint) -> NSObjectProtocol {

return NotificationCenter.default.addObserver(forName: .UIKeyboardWillShow, object: nil, queue: nil) { (notification) in

if let userInfo = notification.userInfo,

let endFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {

// Get animation duration and curve from user info dictionary

let duration: TimeInterval = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0

let animationCurveRawNSN = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber

let animationCurveRaw = animationCurveRawNSN?.uintValue ?? UIViewAnimationOptions.curveEaseInOut.rawValue

let animationCurve: UIViewAnimationOptions = UIViewAnimationOptions(rawValue: animationCurveRaw)

let originYAxisOfKeyboardTrigger = keyboardTrigger.convert(keyboardTrigger.bounds.origin, to: self.view).y

let preferredOriginYAxisOfKeyboardTrigger = endFrame.origin.y - distance - keyboardTrigger.bounds.height

constraint.constant = constraint.constant - (originYAxisOfKeyboardTrigger - preferredOriginYAxisOfKeyboardTrigger)

// Animate changes

UIView.animate(withDuration: duration,

delay: TimeInterval(0),

options: animationCurve,

animations: { self.view.layoutIfNeeded() },

completion: nil)

}

}

}

private func createHideKeyboardObserver(keyboardTrigger: UIView, constraint: NSLayoutConstraint, initialConstraintConstant: CGFloat) -> NSObjectProtocol {

return NotificationCenter.default.addObserver(forName: .UIKeyboardWillHide, object: nil, queue: nil) { (notification) in

if let userInfo = notification.userInfo {

// Get animation duration and curve from user info dictionary

let duration: TimeInterval = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0

let animationCurveRawNSN = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber

let animationCurveRaw = animationCurveRawNSN?.uintValue ?? UIViewAnimationOptions.curveEaseInOut.rawValue

let animationCurve: UIViewAnimationOptions = UIViewAnimationOptions(rawValue: animationCurveRaw)

constraint.constant = initialConstraintConstant

// Animate changes

UIView.animate(withDuration: duration,

delay: TimeInterval(0),

options: animationCurve,

animations: { self.view.layoutIfNeeded() },

completion: nil)

}

}

}

private func removeAllKeyboardVisibilityNotificationObservers() {

keyboardVisibilityObservers.forEach { (observer) in

NotificationCenter.default.removeObserver(observer)

}

keyboardVisibilityObservers.removeAll()

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值