/*因为动画过程中不能实时修改_assistiveWindowRect,
*所以如果执行点击操作的话,_assistiveTouchView位置会以动画之前的位置为准.
*如果执行拖动操作则会有跳动效果.所以需要禁止用户操作.*/
_assistiveWindow.userInteractionEnabled = NO;
NSDictionary *info = [notification userInfo];
CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
//根据实时位置计算于键盘的间距
CGFloat yOffset = endKeyboardRect.origin.y - CGRectGetMaxY(_assistiveWindow.frame);
//如果键盘弹起给_coverWindowPoint赋值
if (endKeyboardRect.origin.y < CGRectGetHeight([UIScreen mainScreen].bounds)) {
_coverWindowPoint = _assistiveWindowPoint;
}
//根据间距计算移动后的位置viewPoint
CGPoint viewPoint = _assistiveWindow.center;
viewPoint.y += yOffset;
//如果viewPoint在原位置之下,将viewPoint变为原位置
if (viewPoint.y > _coverWindowPoint.y) {
viewPoint.y = _coverWindowPoint.y;
}
//如果_assistiveWindow被移动,将viewPoint变为移动后的位置
if (CGPointEqualToPoint(_coverWindowPoint, CGPointZero)) {
viewPoint.y = _assistiveWindow.center.y;
}
//根据计算好的位置执行动画
[UIView animateWithDuration:duration animations:^{
_assistiveWindow.center = viewPoint;
} completion:^(BOOL finished) {
//将_assistiveWindowRect变为移动后的位置并恢复用户操作
_assistiveWindowPoint = _assistiveWindow.center;
_assistiveWindow.userInteractionEnabled = YES;
//使其遮盖键盘
NSArray *windows = [UIApplication sharedApplication].windows;
[windows enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if([obj isKindOfClass:NSClassFromString(@"UITextEffectsWindow")]) {
if (obj && [obj respondsToSelector:@selector(windowLevel)]) {
CGFloat lv = [obj windowLevel];
_assistiveWindow.windowLevel = lv + 1;
}
*stop = YES;
}
}];
}];
` - (void)keyboardWillChangeFrame:(NSNotification *)notification {
// if ([[UIDevice currentDevice].systemVersion integerValue] >= 10) {
// return;
// }
}`