Анимация с ключевыми кадрами кажется нечеткой при перемещении кадров?

Я использую JazzHands для создания анимации с ключевыми кадрами в UIScrollView. Вот пример . Посмотрите на вид сверху. Когда вы переходите со страницы на страницу. Пока анимация работает, вид вверху слегка перемещается слева направо. Анимация выглядит немного нечеткой.

Вот код, взятый из примера здесь :

IFTTTFrameAnimation *titleView1FrameAnimation = [IFTTTFrameAnimation new]; titleView1FrameAnimation.view = self.titleView1; [self.animator addAnimation:titleView1FrameAnimation]; [titleView1FrameAnimation addKeyFrame:[[IFTTTAnimationKeyFrame alloc] initWithTime:timeForPage(1) andFrame:self.titleView1.frame]]; [titleView1FrameAnimation addKeyFrame:[[IFTTTAnimationKeyFrame alloc] initWithTime:timeForPage(2) andFrame:CGRectOffset(self.titleView1.frame, timeForPage(2), 0)]]; [titleView1FrameAnimation addKeyFrame:[[IFTTTAnimationKeyFrame alloc] initWithTime:timeForPage(3) andFrame:CGRectOffset(self.titleView1.frame, timeForPage(3), 0)]]; [titleView1FrameAnimation addKeyFrame:[[IFTTTAnimationKeyFrame alloc] initWithTime:timeForPage(4) andFrame:CGRectOffset(self.titleView1.frame, timeForPage(4), 0)]]; 

При запуске демонстрационной версии взгляните на часть, отмеченную красным на следующем снимке экрана:

введите описание изображения здесь

введите описание изображения здесь

Изменить: Вот код, содержащий эту проблему: https://github.com/steffimueller/Intro-Guide-View-for-Talk.ai

Как сделать анимацию гладкой и менее нечеткой?

Это связано с тем, что частота кадров в JazzHands IFTTTAnimatedScrollViewController установлена ​​для отображения без сетчатки. Вам нужно удвоить число в timeForPage , а также удвоить количество contentOffset в animate , но использовать исходные значения timeForPage в тех местах, где вы использовали это для размещения позиций просмотров вместо того, чтобы использовать его для время анимации.

Вот суть изменений, которые вы должны внести в свой пример, чтобы заставить его работать. Исправлена ​​демо-версия

Вам нужен этот метод для установки времени анимации:

 #define timeForPage(page) (NSInteger)(self.view.frame.size.width * (page - 1) * 2.0) 

И это для настройки центров ваших просмотров на основе размеров страницы:

 #define centerForPage(page) (NSInteger)(self.view.frame.size.width * (page - 1)) 

Затем вам нужно переопределить метод scrollViewDidScroll: в IFTTTAnimatedScrollViewController чтобы использовать удвоенные числа, используемые в настоящее время.

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { [self.animator animate:(NSInteger)(scrollView.contentOffset.x * 2)]; } 

Мы будем работать над тем, чтобы демо-версия JazzHands обновилась!

Перед началом анимационного вызова:

 view.layer.shouldRasterize = YES; (seems that you are using objective-c so I put YES here, for swift should be true) 

Как только анимация завершена,

 view.layer.shouldRasterize = NO; (seems that you are using objective-c so I put NO here, for swift should be false) 

Вы всегда должны использовать его при анимации вида

Вы можете увидеть более подробную информацию об этом в WWDC 2012. Полировка видеоизображений вашего интерфейса (требуется платная подписка разработчиков)

Надеюсь, это поможет!

[РЕДАКТИРОВАТЬ]

Каждый раз, когда вы вызываете метод animate set, должен быть Rasterize до YES перед ним, как в приведенном ниже примере:

 titleView1FrameAnimation.view.layer.shouldRasterize = YES; [self. titleView1FrameAnimation animate:scrollView.contentOffset.x]; 

Я немного испортил код, и кажется, что сохранение этих верхних представлений на месте, в то время как прокрутка прокрутки заставила его перемещаться влево и вправо.

То, что я сделал, это вывести вид заголовка из представления прокрутки и добавить его в представление контроллера просмотра.

Вы можете увидеть это в действии здесь

Позднее редактирование:

Чтобы увидеть, что я изменил, вы можете проверить различия файлов в Git. В основном я переместил ваш titleView s ( titleView1 , titleView2 и т. Д.) Из вида scrollView в представление контроллера представления (поэтому в основном я заменил все строки, которые были такими:

 [self.scrollView addSubView:self.titleView1] 

к чему-то вроде этого:

 [self.view addSubView:self.titleView1] 

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

Ответ на второй вопрос:

Скажем, ваш снимок экрана называется screenshotView . Вы можете продолжить и создать его так:

 UIImageView *screenshotView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ScreenshotImage"]]; [self.view addSubview:screenshotView]; self.screenshotView = screenshotView; [self.screenshotView setCenter:CGPointMake(self.view.center.x + self.view.bounds.size.width, <#yourDesiredY#>)]; 

И оживите его так:

 //screenshotView frame animation IFTTTFrameAnimation *screenshotViewFrameAnimation = [IFTTTFrameAnimation new]; screenshotViewFrameAnimation.view = self.screenshotView; [self.animator screenshotViewFrameAnimation]; [screenshotViewFrameAnimation addKeyFrame:[[IFTTTAnimationKeyFrame alloc] initWithTime:timeForPage(1) andFrame:self.screenshotView.frame]]; [screenshotViewFrameAnimation addKeyFrame:[[IFTTTAnimationKeyFrame alloc] initWithTime:timeForPage(2) andFrame:CGRectOffset(self.screenshotView.frame, -self.scrollView.bounds.size.width, 0.0)]]; [screenshotViewFrameAnimation addKeyFrame:[[IFTTTAnimationKeyFrame alloc] initWithTime:timeForPage(3) andFrame:CGRectOffset(self.screenshotView.frame, -self.scrollView.bounds.size.width, 0.0)]]; [screenshotViewFrameAnimation addKeyFrame:[[IFTTTAnimationKeyFrame alloc] initWithTime:timeForPage(4) andFrame:CGRectOffset(self.screenshotView.frame, -self.scrollView.bounds.size.width * 2, 0.0)]]; 
  • iOS Анимация маски над UIImage
  • Утечка памяти в NSJSONSerialization
  • Сортировка массива на основе второго значения кортежа
  • Как дождаться завершения одной анимации до следующего запуска в Swift?
  • Клавиша KEEP включена, когда UIAlertcontroller представлен в Swift?
  • Как установить условие условных точек останова в Swift с self и enum?
  • различная высота навигации в раскадровке
  • Поврежденные аудио файлы WAV в iOS - почему?
  • Сигнал семафора отправки на время ожидания ожидания
  • Проверка нескольких асинхронных ответов от Alamofire и Swift
  • Скопировать изображение с помощью UIPasteBoard (Swift)
  • Interesting Posts

    Не используется

    Создание толстых файлов: libtool vs lipo (Предпочитаю липо?)

    Как я могу экспортировать простую фальсифицированную модель Maya для использования в Scenekit?

    Как обнаружить Scrollview bounce – iOS

    Какой компонент использует приложение Apple Watch Photos?

    Не удалось подписать сборку iOS с Jenkins

    RTP iPhone camera – Как читать файл AVAssetWriter во время его написания?

    Как установить высоту UITableViewCell в зависимости от размера экрана

    Сделать класс итерабельным с помощью for for for Loop?

    Какое шифрование используется с RMStore и как правильно загрузить приложение, используя его в App Store?

    Как принять самоподписанный сертификат SSL с использованием NSURLSession iOS 7 и его семейство методов делегатов для целей разработки?

    Как создать пользовательскую кнопку с выделенным

    opencv framework для iOS-ошибки

    Objective-C: UITabBarController с разделенными видами

    Как обнаружить отводы в UITableView вне UITableViewCells, т. Е. В заголовке раздела?

    Давайте будем гением компьютера.