Подтвердить что ты не робот

Как (или как будет) Apple делать эту анимацию?

Что я пытаюсь сделать:

Нижние (и верхние) ячейки "сгруппированного стиля" UITableView имеют закругленные углы - как и по умолчанию во многих приложениях Apple iOS и Apple. Иногда ячейки вставляются через анимацию, то есть:

[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];

Теперь это работает отлично. За исключением: Когда ячейка вставлена ​​под нижней ячейкой или над верхней ячейкой (для таблицы сгруппированных стилей) - кажется, нет гладкой анимации.


Проблема:

Я имею в виду, что углы верхних/нижних ячеек нуждаются в анимации от округлых до не окруженных (поскольку они больше не топ/дно), и это происходит в очень рывком и непохожим на Apple модуле.

Является ли Apple когда-либо это в приложении - если да, то как они делают это плавно? В противном случае, как это можно сделать правильно?

NB - Я знаю, что это довольно мелочь, но я немного перфекционист...!

4b9b3361

Ответ 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)

Я предполагаю, что то, о чем вы думали...