Как (или как будет) Apple делать эту анимацию?
Что я пытаюсь сделать:
Нижние (и верхние) ячейки "сгруппированного стиля" UITableView имеют закругленные углы - как и по умолчанию во многих приложениях Apple iOS и Apple. Иногда ячейки вставляются через анимацию, то есть:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
Теперь это работает отлично. За исключением: Когда ячейка вставлена под нижней ячейкой или над верхней ячейкой (для таблицы сгруппированных стилей) - кажется, нет гладкой анимации.
Проблема:
Я имею в виду, что углы верхних/нижних ячеек нуждаются в анимации от округлых до не окруженных (поскольку они больше не топ/дно), и это происходит в очень рывком и непохожим на Apple модуле.
Является ли Apple когда-либо это в приложении - если да, то как они делают это плавно? В противном случае, как это можно сделать правильно?
NB - Я знаю, что это довольно мелочь, но я немного перфекционист...!
Ответы
Ответ 1
Поскольку в настоящий момент нет реального (полного кода) ответа, вот список лучших обходных решений.
-
Измените свой интерфейс так, чтобы эта резкая анимация никогда не происходила.
Это может означать использование простого стиля tableView в отличие от сгруппированных
стиль или использование альтернативного стиля в приложении "Погода" (см.
Крис Вагнер отвечает. Спасибо Крису!). Это может означать также использование
совершенно другой интерфейс, который не включает это
анимация - это было решение, за которое я пошел, мне удалось разобраться
изменение UX, которое возможно даже лучше оригинала.
-
Сделка с этим. Кажется, что Apple в некоторых из менее используемых частей
ОС или их приложения.
-
Отправьте отчет об ошибке на bugreport.apple.com. Было бы неплохо, если бы Apple
исправлено это... Я знаю, это довольно мелочь, но вот почему я
как продукты Apple - потому что они получают маленькие детали правильно!
-
Создайте собственный подкласс UITableViewCell. Я немного подумал о
это, и, хотя это немного проблема программирования, я думаю, что это
выполнимо. Вот как: EDIT: см. Ответ Rab для более подробной информации. Тем не менее, они еще не закодированы, но могут уйти, когда я получу некоторое время.
-
Пользовательская ячейка имеет свойство, определяющее, является ли ячейка верхней, средней или нижней ячейкой. Это можно установить с помощью UITableViewController (или подкласса и т.д.).
-
Свойство backgroundView настраиваемых ячеек может быть выполнено на заказ с использованием кварца для закругленных углов и т.д.
-
Всякий раз, когда свойство, определяющее позицию ячейки, изменяется, изменение в backgroundView может быть анимировано. Трудная часть
здесь анимируется кривая углов... это выполнимо? яблоко
похоже, делает это в углах центра уведомлений, когда он находится
вытащили и подтолкнули - так кажется, что это возможно.
-
Если кто-то серьезно захочет это сделать, и поместите код на gitHub..., вы были бы классны! И вы бы лучше
Apple UI;)
Ответ 2
Взгляните на приложение Weather, которое поставляется с iOS, в обратном порядке, где вы настраиваете свои города, вы увидите таблицу, в которой будут размещены эти анимации. Как отмечает Марк Адамс, в iOS5 имеется переиздание для ОС, чтобы автоматически определять, какая анимация должна использоваться. Если вы хотите настроить таргетинг на pre-iOS5, то по вашему методу делегата, который совершает удаление, вы должны определить, какая ячейка будет удалена в зависимости от ее позиции строки, если ее 0 вы использовали бы UITableViewRowAnimationBottom
, если это последняя строка, которую вы использовали бы UITableViewRowAnimationTop
, и если он где-то посередине, вы, скорее всего, будете использовать UITableViewRowAnimationTop
, чтобы группа сместилась вверх с помощью анимации, но вам может понадобиться играть с ней.
Ответ 3
Извините, у меня нет времени, чтобы написать реальный код и проверить его, но, возможно, я могу дать вам преимущество. Вы в основном просите установить радиус угла только на двух углах ячейки, затем плавно приближайте их к острым углам, когда они перемещаются в центр стола.
Один из способов сделать это - определить ваш пользовательский UITableViewCell с CAShapeLayer в качестве фона. CAShapeLayer извлекается из путей Кварца: см. http://developer.apple.com/library/IOS/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_paths/dq_paths.html#//apple_ref/doc/uid/TP30001066-CH211. Путь CAShapeLayer является анимированным, но не с неявной анимацией. Вам нужно будет использовать CAPropertyAnimation или выполнить собственную интерполяцию. По моему опыту, например, в http://itunes.apple.com/us/app/blaster-through-asteroid-field/id414827482?mt=8, ваша собственная интерполяция выполняется быстрее и надежнее (но кроме интерполяции и обнаружения столкновений все игры полагаются на кварцкор, поэтому я не думаю, что у вас будет проблема с производительностью).
АННОТАЦИЯ: Пользовательская ячейка поддерживает CAShapeLayer. CAShapeLayer имеет путь с двумя закругленными углами. Вы анимируете свойство пути, поскольку позиция ячейки перемещается к определенной точке экрана. Готово, плавно анимированные округлые углы. Дайте мне знать, если вы попробуете:-)
Другие ссылки:
http://developer.apple.com/library/IOS/#documentation/GraphicsImaging/Reference/CAShapeLayer_class/Reference/Reference.html#//apple_ref/doc/uid/TP40008314
http://developer.apple.com/library/IOS/#documentation/GraphicsImaging/Reference/CGPath/Reference/reference.html
Ответ 4
Вы пытались вставить две строки за раз? Тот, что сверху, с нулевой высотой, а следующий с закругленными углами (для этого вы можете использовать кварцевый сердечник)
Ответ 5
Если вы отметите раздел "Метки" в разделе "Отправить на Youtube" в приложении "Фотографии", вы увидите, что анимация яблок так же "отрывистая", как и вся наша. (очевидно, вам нужно видео для загрузки на YouTube)
Я предполагаю, что то, о чем вы думали...