У меня есть UIScrollView, размер которого изменяется при представлении клавиатуры (чтобы она оставалась над клавиатурой, когда она скользит снизу). Чтобы анимация работала правильно, я должен указать UIAnimationOptionBeginFromCurrentState.Если я не укажу это, я получу странные эффекты во время анимации, и я могу видеть представление позади UIScrollView.Вот процедура анимации:
- (void) onKeyboardWillShow: (NSNotification*) n
{
// get the keyboard rect
CGRect rKeyboard; NSValue* v;
v = [n.userInfo objectForKey: UIKeyboardFrameEndUserInfoKey];
[v getValue: &rKeyboard];
rKeyboard = [self.view convertRect: rKeyboard fromView: nil];
// get the keyboard animation duration, animation curve
v = [n.userInfo objectForKey: UIKeyboardAnimationDurationUserInfoKey];
double keyboardAnimationDuration;
[v getValue: &keyboardAnimationDuration];
v = [n.userInfo objectForKey: UIKeyboardAnimationCurveUserInfoKey];
UIViewAnimationCurve keyboardAnimationCurve;
[v getValue: &keyboardAnimationCurve];
// animate
[UIView animateWithDuration: keyboardAnimationDuration
delay: 0
options: UIViewAnimationOptionBeginFromCurrentState | keyboardAnimationCurve
animations: ^{
CGRect f = _clientAreaView.frame;
f.size.height = rKeyboard.origin.y - f.origin.y;
_clientAreaView.frame = f;
}
completion: ^(BOOL finished) {
}];
}
Проблема в UIScrollView backgroundColor, для которого установлено значение scrollViewTexturedBackgroundColor.После анимации текстурированный фон сжимается (с незначительными артефактами).Если я все оживляю до первоначального размера, он возвращается к нормальному.
Как сделать так, чтобы фон либо не изменял размер с анимацией, либо, по крайней мере, возвращал фон «несжатый» к несжатомупосмотри пост анимации?Я попытался установить цвет bg в процедуре завершения (белый, затем обратно в scrollViewTexturedBackgroundColor, но это не сработало, и я не совсем понимаю, почему.)