Анимация смены кадра в UIView не является плавной, приводит к эффекту упругости

#ios #animation #uiview #frame

#iOS #Анимация #uiview #кадр

Вопрос:

Я пытаюсь анимировать смену кадра в UIView, где изменяется как происхождение, так и размер. Анимация не выглядит гладкой и имеет эффект упругости. Для этого я использую следующий код

 [UIView
    animateWithDuration:0.5
    animations:^{
        self.view.frame = newFrame;
    }];
  

Кажется, что сначала размер меняется очень быстро, а затем происхождение изменяется с указанной продолжительностью анимации, что в конечном итоге приводит к эффекту упругости. Как мне сделать, чтобы это выглядело плавно?

Ответ №1:

Вы могли бы попробовать изменить кривую анимации, возможно, попробовать линейную.

 dispatch_async(dispatch_get_main_queue(), ^{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationCurve:UIViewAnimationCurveLinear];
    self.view.frame = newFrame;
    [UIView commitAnimations];
});
  

Комментарии:

1. Я уже пробовал использовать UIViewAnimationCurveLinear, но это не сработало. Размер изменяется немедленно, а затем запускается анимация для изменения положения.

2. вы пробовали использовать весь блок кода? Я только что попробовал это — и размер, и происхождение анимируются плавно одновременно

3. Понял это прямо сейчас. Мне пришлось анимировать все подвиды по отдельности, иначе у него появился этот эффект отскока. Спасибо.

4. это не изменяет размер the self.view. Это только перемещает его.

Ответ №2:

При анимации смены кадров каждого из подвидов по отдельности произошло волшебство. Теперь анимация выполняется очень плавно. Спасибо.