У меня есть вид контейнера - позвольте ему просмотреть его сокет, который имеет одно подвью, это представление содержимого - позвольте ему просмотреть его. Этот вид вилки может быть равен нулю, т.е. Вид сокета в настоящее время пуст. Если он содержит вид вилки, он занимает все пространство сокетов, т.е. Его фрейм - это границы сокетов. С внешней точки зрения вы даже не можете сказать, что на самом деле есть два вида, так как вид вилки всегда точно там, где находится сокет.
Я изо всех сил стараюсь, чтобы анимация работала правильно: если вид плагина существует и выложен перед анимацией, все работает так, как ожидалось. Однако, если я устанавливаю представление сокета-розетки только тогда, когда анимация уже запущена, я получаю нежелательный эффект:
Вид вилки выложен туда, где он будет в конце анимации, и не будет анимировать рядом со своим сокетом. Я хотел бы, чтобы он выглядел так, будто он был там все время, но только теперь стал видимым, то есть вид плагина (и его подвид) должен анимировать рядом со сокетом, даже если я добавлю его во время анимации.
Как я могу достичь такого поведения?
Мои идеи: очевидно, что представление плагина должно быть выложено дважды: один раз для его окончательной позиции и еще раз для того, где сокет-просмотр начал анимацию или где он был добавлен. Я мог бы вычислить этот фрейм, применить его без анимации и оживить к окончательному кадру в новом блоке анимации. Для того, чтобы время анимации было последовательным, мне нужно было иметь такую же кривую и продолжительность, но начать анимацию в прошлом или каким-то образом переслать ее. Это возможно? Существуют ли другие подходы к тому, чтобы представление вилки всегда было полной шириной и высотой?
В ответ на ответ Роба, вот несколько подробностей о том, что именно я ищу:
-
Вид сокета анимируется, потому что изменился размер связанного владельца. Вы можете рассматривать его как ячейку полной ширины в виде таблицы.
-
В представлении плагина могут содержаться собственные представления, например, изображения, метки и т.д. Они должны также присоединиться к анимации представления сокета, как если бы они всегда были там с момента запуска анимации.
-
Хотя теоретически возможно, что новая анимация начнется, пока она уже запущена, я действительно не против поведения в этом случае.
-
Не обязательно, чтобы пользователь мог взаимодействовать с представлением вилки во время работы анимации; это, скорее всего, произойдет во время изменения ориентации интерфейса.
-
Вид витрины может решить изменить его содержимое из-за асинхронного обновления модели во время анимации, но опять же это краевой случай, и я не против, если анимация в этом случае выглядит безупречной. Его размер, однако, не изменяется - он всегда совпадает с размером виджета.