iOS键盘弹出时动画时长失效问题
iOS键盘弹出动画问题
今天在写键盘弹出时遇见一个问题。监听UIKeyboardWillShowNotification通知让Label做一个移动的动画,指定duration为15,但动画实际完成时间却与键盘弹出时间一致。
- (void)keyboardWillShow:(NSNotification *)notification {[UIView animateWithDuration:15 animations:^{CGRect frame = self.moveLabel.frame;frame.origin.y = 300;self.moveLabel.frame = frame;}];
}复制代码
如果是在UIKeyboardDidShowNotification中做动画,动画完成时间则为指定时间。
- (void)keyboardDidShow:(NSNotification *)notification {[UIView animateWithDuration:5 animations:^{CGRect frame = self.moveLabel.frame;frame.origin.y = 300;self.moveLabel.frame = frame;}];
}
复制代码
这两者的区别一个是键盘将要弹出,一个是键盘已经弹出。这跟我的动画有什么关系呀?
把UIKeyboardWillShowNotification通知方法中的动画去掉,发现依旧有动画效果。诶~好神奇~肿么回事,难道keyboardWillShow调用时就处于一个Animation里(我猜的)?
- (void)keyboardWillShow:(NSNotification *)notification {
// [UIView animateWithDuration:15 animations:^{CGRect frame = self.moveLabel.frame;frame.origin.y = 300;self.moveLabel.frame = frame;
// }];
}
复制代码
搜了好多地方都没有找到keyboardWillShow的原理,好尴尬~ 为了验证自己的猜测,写了一个嵌套动画,用来验证嵌套的动画执行时间为多少。
- (IBAction)moveAction:(id)sender {self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(changeText) userInfo:nil repeats:YES];[UIView animateWithDuration:2 animations:^{ // 外层动画时间CGRect frame = self.moveLabel.frame;frame.origin.y = 100; // 外层动画坐标self.moveLabel.frame = frame;[UIView animateWithDuration:10 animations:^{ // 内层动画时间CGRect frame = self.moveLabel.frame;frame.origin.y = 400; // 内层动画坐标self.moveLabel.frame = frame;}];}];
}- (void)changeText {self.timeCount++;self.moveLabel.text = [NSString stringWithFormat:@"Time = %ld,\nFrame.origin.y = %.0f", (long)self.timeCount, self.moveLabel.frame.origin.y];if (self.timeCount > 12) {[self.timer invalidate];self.timer = nil;}
}
复制代码
最终效果为:动画时间取外层动画时间值,结果取内层动画坐标值。 所以我那个猜测还是有道理的… 希望有大神指点下keyboardWillShow的原理
更新
受到大神评论的指点,又多get到了一个知识点。
通过设置动画的options使动画忽略外层动画嵌套效果,只关心自己的动画参数。options参照www.jianshu.com/p/3723c403a…
- (void)keyboardWillShow:(NSNotification *)notification {[UIView animateWithDuration:15 delay:0 options:UIViewAnimationOptionOverrideInheritedDuration | UIViewAnimationOptionOverrideInheritedCurve animations:^{CGRect frame = self.moveLabel.frame;frame.origin.y = 300;self.moveLabel.frame = frame;} completion:nil];
}
复制代码
iOS键盘弹出时动画时长失效问题相关推荐
- 成品app直播源码,iOS键盘弹出遮挡输入框
成品app直播源码,iOS键盘弹出遮挡输入框解决的相关代码 self.phoneInput = [UITextField new];self.phoneInput.placeholder = @&qu ...
- ios 键盘弹出input输入框被遮挡 键盘隐藏时页面无法回弹解决方案
ios 微信键盘弹出input输入框被遮挡 键盘隐藏时页面无法回弹解决方案 问题:测试发现ios微信端浏览器中,键盘弹出后,输入框被软键盘遮挡,input失焦后,因软键盘顶起的页面没有回弹到原来位置, ...
- iOS键盘弹出通知后加入动画
首先我们要注册键盘弹出和弹入的通知 [[NSNotificationCenter defaultCenter] addObserver:self ...
- Android11键盘弹出动画,(2016-11-04完美解决)移动端iOS第三方输入法遮挡底部input及android键盘回落后留白问题...
问题概述 问题1:H5 web 移动端 输入框, 键盘唤起后fixed定位好的元素跟随页面滚动了起来- fixed属性失效了!满屏任性横飞, 如下图: 问题2:有几后来含些在到气时按式近篇来又的方浏消 ...
- Android页面监听虚拟键盘弹出、收起
js 移动端关于页面布局,如果底部有 position: fixed 的盒子, 又有input,当软键盘弹出收起都会影响页面布局. 如图: 页面这时候Android可以监听resize事件,代码如下, ...
- 小程序中点击input控件键盘弹出时placeholder文字上移
最近做的一个小程序项目中,出现了点击input控件键盘弹出时placeholder文字上移,刚开始以为是软键盘弹出布局上移问题是传说中典型的fixed 软键盘顶起问题,因此采纳了网上搜到的" ...
- Android 软键盘弹出时布局内指定内容上移实现及问题解决
Android 软键盘弹出时布局内指定内容上移实现及问题解决 参考文章: (1)Android 软键盘弹出时布局内指定内容上移实现及问题解决 (2)https://www.cnblogs.com/as ...
- Android 软键盘弹出时把布局顶上去,控件乱套解决方法
Android 软键盘弹出时把布局顶上去,控件乱套解决方法 参考文章: (1)Android 软键盘弹出时把布局顶上去,控件乱套解决方法 (2)https://www.cnblogs.com/zhuj ...
- 软键盘弹出时popwindow_【示例】解决软键盘弹出时底部元素上浮的问题
问题描述 在html5plus环境下,当html中存在固定在底部的元素时,此时弹出软键盘的话,底部的元素也会被弹上来. 出现这种情况时,看起来页面布局好像乱掉了,这样给用户的体验不太理想. 问题分析 ...
最新文章
- Java 类和对象的内存分配机制
- iOS开发-NSString去掉所有换行及空格
- 我的Android进阶之旅------gt;Android字符串资源中的单引號问题error: Apostrophe not preceded by 的解决的方法...
- 使用C语言中的宏来定位出错信息
- Android-广播接收者简介
- 面试题 - 两个页面间如何传递数据
- python 抽样函数_python中resample函数实现重采样和降采样代码
- Springboot配置fastjson开发
- hive开启kerberos-beeline连接
- MRO的计算(C3算法及应用)
- 用激光把谷歌的标志投射到月球是否可行?
- 使用C语言快速制作一个视频播放器
- SQL查询语句大全集锦
- Python基础之键盘操作
- [hdu3873] Invade the Mars
- 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念
- excel阅读器Android,Excel阅读器
- 马尔科夫随机场和马尔科夫链
- 【bzoj3238】差异 后缀自动机
- 教师如何创建在线查分系统
热门文章
- Java 数字用二进制表示,以及原码,反码,补码、负数的二进制表示
- 如何在TortoiseGit中使用ssh-keygen生成的key
- html5+开发移动app
- JNI的native代码中打印日志到eclipse的logcat中
- 【Android基础】序列化 Serializable vs Parcelable
- RxSwift UI控件扩展
- 复制链接到safari浏览器打开_JS实现复制到剪贴板(兼容FF/Chrome/Safari所有浏览器)...
- 在linux下查询日志
- JS数组去重的6种算法实现
- hadoop端口号列表