Как я могу использовать пользовательские анимации для onOrderOut в Базовой Анимации?

Мы можем использовать sample для последовательности строк (row_number()) и переставить «значение» на основе выборочного индекса

df1 %>% 
  group_by(class) %>% 
  mutate(value = value[sample(row_number())]) 

Или как @RonakShah, упомянутый в комментариях, если мы иметь только одну строку, то использование sample вызовет sample последовательности значений. Итак, если мы непосредственно используем sample для «значения», то можно использовать условие if/else

df1 %>% 
  group_by(class) %>%
  mutate(value = if(n() == 1) value else sample(value, n()))

Если мы хотим использовать sample_n, это можно сделать в do

df1 %>% 
   group_by(class) %>%
   do(sample_n(., size = nrow(.)))

ПРИМЕЧАНИЕ. Нам нужно указать nrow вместо n(), так как некоторые специфические функции приливов и отливов работают в определенных функциях, таких как mutate/fsummarise/filter/arrange и т. Д., Но они не реализованы для работать вместе с sample_n

8
задан Ned Batchelder 9 November 2008 в 17:40
поделиться

2 ответа

Цитата Джона Харпера из списка рассылки quartz-dev :

Есть фундаментальная проблема с возврат любой анимации для onOrderOut - к моменту анимация должна работать, слой больше не в дереве, поэтому у него нет эффект. Так что onOrderOut бесполезен для запуска анимации; это может быть полезно для запуска другого кода, когда слои удаляются из дерева.

Лучшее решение, которое я нашел для этого (при условии перехода затухания по умолчанию на родителя не то, что ты хочешь, чего часто не происходит) заключается в добавлении пользовательских анимация для применения эффекта удаления вы хотите тогда в didStop делегат анимации, фактически удалить слой. Часто бывает удобно создать единую группу анимаций с набором свойств делегата и fillMode = вперед, removeOnCompletion = NO, чтобы вы могли удалите слой в конце анимация без возможности слой все еще виден в его нормальное состояние.

Если вы делаете много таких случаев, легко написать общий суперкласс, который запускает анимацию, устанавливает делегата анимации в класс и реализует + animationDidStop: для удаления слоя w / o анимация включена. Это восстанавливает природу CoreAnimation «запустил и забыл», которая, как вы надеялись, будет присутствовать в реализации по умолчанию.

4
ответ дан 6 December 2019 в 00:08
поделиться

Вы проверили, что Ваш метод называют с key как @"onOrderOut" и что Ваш метод возвращает корректную анимацию?

0
ответ дан 6 December 2019 в 00:08
поделиться