当前位置: 首页 > news >正文

5分钟上手UIViewController-KeyboardAnimation:iOS键盘动画类别完全指南

5分钟上手UIViewController-KeyboardAnimation:iOS键盘动画类别完全指南

【免费下载链接】UIViewController-KeyboardAnimationShowing/dismissing keyboard animation in UIViewController category.项目地址: https://gitcode.com/gh_mirrors/ui/UIViewController-KeyboardAnimation

UIViewController-KeyboardAnimation是一个专为 iOS 键盘动画设计的 UIViewController 类别组件:只需一行订阅代码,它就能监听键盘显示/隐藏通知,自动使用系统键盘的动画时长与曲线来驱动你的自定义动画,彻底告别繁琐的键盘通知处理。本文带你 5 分钟完成安装与上手 🚀

一、它解决什么问题?iOS 键盘动画的痛点

做过 iOS 开发的朋友都有体会:键盘弹出时要顶起输入框、收起时要恢复布局,每个页面都要重复写一遍通知监听、解析userInfo里的时长和曲线……大量重复代码,稍有不慎动画就和系统键盘"脱节"了。

这个类别把这些脏活全包了:

  • ✅ 自动订阅UIKeyboardWillShowNotification/UIKeyboardWillHideNotification
  • ✅ 自动从通知中提取键盘的最终 frame、动画时长、动画曲线
  • ✅ 把你的动画块包裹在UIView.animateWithDuration中,与键盘逐帧同步
  • ✅ 用极少的代码声明动画,一行搞定

二、一键安装:三种方式任选

方式 1:CocoaPods(推荐)

在 Podfile 中添加(版本 1.3,支持 iOS 6.0+):

pod 'UIViewController+KeyboardAnimation', '~> 1.3'

方式 2:Git 子模块或克隆源码

git clone https://gitcode.com/gh_mirrors/ui/UIViewController-KeyboardAnimation

方式 3:直接拷贝文件

组件核心只有两个文件(头文件 + 实现),拷贝进工程即可使用,零依赖。

安装说明详见 README.md,版本信息见 UIViewController+KeyboardAnimation.podspec。

三、三步完成键盘动画订阅(聊天输入框场景)

以最典型的"聊天式输入框随键盘顶起"为例 📱

第 1 步:在 Interface Builder 中,给输入框底部与父视图底部建立 Auto Layout 约束,并通过IBOutlet引出:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *chatInputBottomSpace;

第 2 步:在viewWillAppear中订阅键盘(这是官方推荐的最佳时机):

@weakify(self) [self an_subscribeKeyboardWithAnimations:^(CGRect keyboardRect, NSTimeInterval duration, BOOL isShowing) { @strongify(self) self.chatInputBottomSpace.constant = isShowing ? CGRectGetHeight(keyboardRect) : 0; [self.view layoutIfNeeded]; } completion:nil];

第 3 步:在viewWillDisappear中退订,避免内存泄漏和跨页面误触发:

[self an_unsubscribeKeyboard];

就这样!输入框会完全跟随系统键盘的节奏弹出与回落,动画时长和曲线由系统自动决定,你无需手动配置 ⏱️

四、进阶 API:更复杂的键盘动画需求

简单场景用an_subscribeKeyboardWithAnimations:completion:足够;复杂场景(如键盘弹出前先做转场、动画结束回调)可看下面的方法清单 👇

方法用途
an_subscribeKeyboardWithBeforeAnimations:animations:completion:三段式:动画前的准备动作 + 主动画 + 完成回调
an_subscribeKeyboardFrameChangesWithAnimations:响应键盘尺寸变化(如方向旋转、输入法切换),v1.3 新增
an_subscribeKeyboardShowHideWithAnimations:上述方法的别名写法
an_unsubscribeKeyboard退订显示/隐藏事件并清空动画块
an_unsubscribeKeyboardFrameChanges退订尺寸变化事件

完整的 API 签名与参数说明见 UIViewController+KeyboardAnimation.h。

💡 使用 before 段可以做一些"瞬时"的准备工作,例如 Demo 中在键盘弹出瞬间切换图片与淡入淡出头部视图,效果非常自然。可参考 Demo/KeyboardAnimationDemo/ViewController.m 的完整演示。

五、工作原理:它如何与系统键盘保持同步

拆开实现看,逻辑非常清晰(约 150 行代码,适合精读学习)📖

  1. 订阅阶段an_subscribe...系列方法通过关联对象(objc_setAssociatedObject)保存你传入的动画块,并向NSNotificationCenter注册键盘通知观察者;
  2. 触发阶段:键盘通知到达后,从userInfo中解析出键盘最终 frame(UIKeyboardFrameEndUserInfoKey)、时长、曲线三个关键参数;
  3. 动画阶段:在UIView.animateWithDuration中先执行 before 块,再以系统曲线执行你的主动画块,最后回调 completion。

核心处理逻辑见 UIViewController+KeyboardAnimation.m,通知解析部分见 UIViewController+KeyboardAnimation.m。

六、新手避坑清单 ⚠️

  1. 一定要退订:如果不退订,当前页面消失后它仍会响应键盘事件,导致其他屏幕出现莫名其妙的动画;
  2. 警惕循环引用:动画块会被持有在 ViewController 上,块内请用@weakify(self)/@strongify(self)(依赖 ReactiveCocoa 风格宏,也可用__weak等价实现);
  3. Auto Layout 记得刷新:修改约束常量后需调用[self.view layoutIfNeeded],否则动画不生效;
  4. 订阅时机:推荐viewWillAppear订阅、viewWillDisappear退订,与页面生命周期严格对应。

七、项目文件导读

文件说明
UIViewController+KeyboardAnimation.h公开 API 与块类型声明
UIViewController+KeyboardAnimation.m完整实现(通知监听 + 动画驱动)
UIViewController+KeyboardAnimation.podspecCocoaPods 配置
Demo/KeyboardAnimationDemo/ViewController.m可运行的键盘动画 Demo 页面
Demo/KeyboardAnimationDemo/Base.lproj/Main.storyboardDemo 界面布局
README.md官方说明文档

Demo 工程完整目录见 Demo/KeyboardAnimationDemo/,打开即可体验键盘弹出时背景色渐变、间距联动等效果。

八、常见问题 FAQ

Q:最低支持什么系统版本?A:iOS 6.0+,覆盖绝大多数设备。

Q:Swift 工程能用吗?A:可以。组件以 Objective-C 编写,Swift 工程通过桥接头(或 Pod 自动集成)导入即可直接调用这些类别方法。

Q:需要其他依赖吗?A:无强制依赖,仅代码示例中使用了 ReactiveCocoa 的@weakify/@strongify宏,可自行替换为原生 weak/strong 写法。

Q:能同时响应键盘弹出和尺寸变化吗?A:能。分别调用an_subscribeKeyboardWithAnimations:an_subscribeKeyboardFrameChangesWithAnimations:即可,退订时对应调用各自的 unsubscribe 方法。

写在最后

5 分钟回顾一下:安装 → viewWillAppear 订阅 → 改约束常量 → viewWillDisappear 退订,四步就能让任何页面的键盘动画与系统完美同步。整个类别 API 少而精、源码透明,既是即插即用的工具,也是学习 iOS 键盘通知机制的优质范例。现在就去你的工程里试试吧 🎉

【免费下载链接】UIViewController-KeyboardAnimationShowing/dismissing keyboard animation in UIViewController category.项目地址: https://gitcode.com/gh_mirrors/ui/UIViewController-KeyboardAnimation

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4209118.html

相关文章:

  • 网络安全面试全攻略:技术要点与实战技巧
  • RPCS3 PS3模拟器汉化配置指南:3步让界面变成中文
  • 2026年软件测试面试趋势与自动化测试实战指南
  • Spring Boot Failed to determine driver class 根源解析
  • FreeRTOS消息队列内存机制与误用避坑指南
  • 5分钟本地跑通Superflows:Docker+Supabase开发环境搭建完整指南
  • Cactus泛基因组图谱实战:酵母图谱与HPRC人类图谱案例及panacus统计可视化
  • RocketMQ核心知识点与面试解析
  • 京东前端实习面试核心考点与优化策略
  • LobsterAI智能体开发与多模态面试模拟实战
  • JellyRefreshLayout:3个理由让这款果冻式下拉刷新组件比SwipeRefreshLayout更惊艳
  • 如何用GitHub免费托管你的播客:TheContext-Podcast的Raw RSS + Releases部署方案
  • RoMa快速入门:旋转矩阵、四元数、旋转向量与欧拉角互转全解教程
  • Kali散列密码破解实战:从哈希识别到GPU加速还原
  • SyncKit 服务器安全加固实战:JWT 认证、RBAC 权限与防 SQL 注入生产级防护指南
  • 大模型Agent面试核心:工具调用与决策逻辑解析
  • HyperLine Spotify插件深度解析:如何在macOS终端实时显示正在播放歌曲(完整原理指南)
  • 从输入到搜索结果:rx-react autocomplete实例如何用5行响应式管道实现防抖搜索
  • AI大模型面试核心考察方向与高频问题解析
  • PC微信防撤回补丁实操指南:三步装好微信防撤回,撤回的消息再也藏不住
  • 一行文本该落在哪里?详解Combo Breaker的findFlowSlots槽位搜索算法
  • toxic-repos快速上手教程:5步从零搭建你的开源仓库安全黑名单
  • 如何用yuzu在电脑上免费运行Switch游戏
  • BTree索引自适应调优:用模拟退火实现负载感知优化
  • Echo Editor实时协作展望:y-prosemirror与Yjs协同编辑探索指南
  • 5分钟上手教程:CVE-2019-11708 Firefox浏览器漏洞利用链快速运行完整指南
  • 彻底解决雪花算法ID在前端JavaScript中的精度丢失问题
  • SAP固定资产核心底表全解析:从ANLA到ANEP的数据逻辑与应用
  • Java Stream limit()方法:从短路求值到性能优化的核心实践
  • 射击游戏后台开发:物理引擎应用与移动模拟实战