Custom UIViewController Transitions | Swift, Xcode, UIViewControllerTransitioningDelegate

Поділитися
Вставка
  • Опубліковано 12 гру 2024

КОМЕНТАРІ • 7

  • @nefest71
    @nefest71 Рік тому

    Что за container на 19:53, почему у меня нет его у selectedStoryCell?

  • @vitkor1526
    @vitkor1526 Рік тому

    Спасибо, очень полезно. Было бы круто если бы еще код прилагался

    • @big-tech-pro
      @big-tech-pro  Рік тому +1

      Спасибо за фидбек!
      В скором времени планируется выложить код в открытый доступ.

  • @НиколайГриня-ю7х

    Ребята вы молодцы. Код прилагать ненадолго, так как лучше когда пальчики работают с мозгами. Но как вы преподносите это - просто треш. Во первых заставки текста очень быстрые и объяснений очень мало, во вторых вы в промежутке дописываете что-то или не записываете видео . А идея хорошая . У меня в конце этого видео не увидел "container" на 19.52сек . Спасибо за идею

  • @AndreyDidenko-y2e
    @AndreyDidenko-y2e Рік тому

    Видео супер, вопрос почему если я просколю коллекшн и нажму на ячейку то новый контроллер открывается уже не из центра выбранной ячейки а откуда-то справа ?
    если не скролить все работает отлично)

    • @big-tech-pro
      @big-tech-pro  Рік тому +1

      Привет! Спасибо за фидбек)
      Что касается проблемы, скорее всего, ты забыл добавить сдвиг по оси X при скролле горизонтальной коллекции. Этот оффсет берется из метода scrollViewDidScroll протокола UIScrollViewDelegate. Данный метод добавляется в расширение контроллера, которое соответствует протоколу UICollectionViewDelegateFlowLayout. Ну потому что UICollectionViewDelegateFlowLayout соответствует протоколу UIScrollViewDelegate.
      Реализация метода выглядит как-то так:
      func scrollViewDidScroll(_ scrollView: UIScrollView) {
      self.scrollXOffset = scrollView.contentOffset.x
      }
      Этот оффсет сохраняется в переменную контроллера, а затем используется для расчет стартовой точки, откуда будет презентиться стори вью контроллер (Ширина контента коллекции (contentSize.width) много больше ширины экрана. Именно поэтому у тебя контроллер появляется откуда-то справа. Для решения этой проблемы необходимо лишь вычесть из координаты x центра ячейки [координаты центра ячейки считаются относительно content size коллекции] сдвиг от скролла этой коллекции, чтобы точка была всегда в пределах ширины экрана).
      Расчет координат стартовой точки выглядит следующим образом:
      private var startingAnimationPoint: CGPoint {
      ...
      let x = cellCenterPoint.x - self.scrollXOffset
      let y = cellCenterPoint.y + navigationBarHeight + navigationBarYOffset
      return CGPoint(
      x: x,
      y: y
      )
      }

    • @AndreyDidenko-y2e
      @AndreyDidenko-y2e Рік тому

      @@big-tech-pro Большое спасибо! буду исправлять!