текстурированный фон uiscrollview сжимается после покадровой анимации - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть 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, но это не сработало, и я не совсем понимаю, почему.)

1 Ответ

0 голосов
/ 24 сентября 2011

Я думаю, что ваша проблема может быть связана с установкой значения UIKeyboardAnimationCurveUserInfoKey (которое является UIViewAnimationCurve, а не UIViewAnimationOption) вместе с UIViewAnimationOptionBeginFromCurrentState (которое должно захватывать текущее состояние и изменять его).

Анимация фрейма UIScrollViewUITableView) глючит на iOS, поэтому вы должны анимировать свойства contentInset и scrollIndicatorInsets, а также contentOffset, если вам нужно изменить положениеваши взгляды (например, перемещение текстового поля вверх).Просто добавьте высоту клавиатуры в нижнюю часть вставок и подсчитайте, нужно ли прокручивать ее вверх или вниз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...