在动画块中调用layoutIfNeeded会冻结UI时,有没有人遇到过同样的问题?
我有一个方法:
- (void)hide {
dispatch_block_t onMain = ^{
CGFloat height = -viewContent.frame.size.height;
[UIView animateKeyframesWithDuration:0.15f delay:0 options:0 animations:^{
[UIView addKeyframeWithRelativeStartTime:0.f relativeDuration:0.7f animations:^{
self.constraintViewContentBottom.constant = height/3;
[self layoutIfNeeded];
}];
[UIView addKeyframeWithRelativeStartTime:0.7f relativeDuration:0.3f animations:^{
self.constraintViewContentBottom.constant = height;
[self layoutIfNeeded];
}];
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.2f animations:^{
self.viewBackground.alpha = 0.0f;
}
completion:^(BOOL finished) {
self.hidden = YES;
}];
}];
};
if([NSThread isMainThread]) {
onMain();
}
else {
dispatch_sync(dispatch_get_main_queue(), onMain);
}
}
在许多设备上都能很好地运行,但在iPhone 7上,行[self layoutIfNeeded];
冻结了用户界面。
我无法调试该设备,但可以从中获取一些日志。
有谁知道我们如何解决问题?
感谢任何帮助。
答案 0 :(得分:0)
在动画块之前设置约束'常量。 layoutIfNeeded
是唯一必须加入块中的东西......