Джинн или аналогичный эффект для добавления в избранное - PullRequest
4 голосов
/ 04 февраля 2011

У меня есть приложение для iPhone с вкладками «Все» и «Избранное», содержащее стандартные макеты основных деталей.На вкладке «Все» пользователь может выбрать «Добавить в избранное».

Я ищу хорошую визуальную очередь, чтобы указать пользователю, что после этого элемент будет доступен на вкладке «Избранное».

Существует ли что-то вроде эффекта 'джинна', чтобы я мог это указать?Если нет, то каков стандартный способ уведомления пользователя о подобном?Спасибо!

Ответы [ 4 ]

4 голосов
/ 24 февраля 2011

«Настоящий» эффект джинна, реализованный в Mac OS X, представляет собой нелинейное преобразование исходного изображения. Один из способов реализовать это - использовать фильтры Core Image (которые являются частными / недокументированными на iOS, но доступны на Mac).

Вы пишете фильтр с параметром 'time'. Для каждого значения параметра времени в данном временном интервале (скажем, {0,2}) вам необходимо определить исходную координату для каждой целевой координаты на изображении. Если исходная координата выходит за границы, установите альфа на ноль, иначе верните значение входного изображения с исходной координатой.

kernel vec4 ASGenieKernel(sampler src, float t, float D, float ytarget) {

vec2 takeFrom; // In destination coordinates.
vec2 original = samplerCoord(src);
vec2 size;
float g, t2, a;
vec4 c;

size = samplerSize(src);
t2 = compare(t-1.0,t,1.0);
takeFrom.x = original.x + compare(t-1.0,0.0,1.0)*size.x*(t-1.0);

a = compare(takeFrom.x, 0.0, 1.0);
a = compare(a-0.5,0.0,compare(takeFrom.x-size.x, 1.0, 0.0));

// Apply an envelope. This is where non-linearity is introduced. 
t2 = t2 * (1.0 - tan_(1.57*original.x/size.x - 0.78539))*0.5;

g = 1.0 - D / size.y;
takeFrom.y = (original.y - t2*ytarget*g)/(1.0-t2*g);
a = compare(a-0.5,0.0,compare(takeFrom.y, 0.0, 1.0));
a = compare(a-0.5,0.0,compare(takeFrom.y-size.y, 1.0, 0.0));

takeFrom.x = compare(takeFrom.x, 0.0, takeFrom.x);
takeFrom.x = compare(takeFrom.x-size.x, takeFrom.x, 0.0);
takeFrom.y = compare(takeFrom.y, 0.0, takeFrom.y);
takeFrom.y = compare(takeFrom.y-size.y, takeFrom.y, 0.0);

c = sample(src, takeFrom);
c.w = a;

return c; }

У меня есть сообщение в блоге с некоторыми подробностями и проектом Quartz Composer: Сообщение в блоге Genie Effect

4 голосов
/ 04 февраля 2011

Как насчет анимации, которую Mail использует для перемещения сообщения в папку?Это может быть знакомо вашим пользователям, и это не должно быть сложно реализовать с помощью CAKeyframeAnimation.

3 голосов
/ 13 марта 2013

Есть несколько способов сделать это. Если вы хотите использовать стандартный эффект «Сосать», вы должны увидеть этот ответ (или этот один) ... Однако оба этих ответа используют метод setAnimationPosition UIView. это частный метод, и ваше приложение будет отклонено из App Store (возможно, это не тот результат).

Вы все еще можете использовать только анимацию, сохраняя положение анимации по умолчанию 0,0 (Сосать в верхнем левом углу), используя этот код:

[UIView beginAnimations:@"suckEffect" context:nil];
[UIView setAnimationTransition:(UIViewAnimationTransition)103 forView:self.view cache:NO];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:kAnimationDuration];

// Remove Subview

[UIView commitAnimations];

Наконец-то, хотя хорошие программисты могли бы написать это сами ... замечательные программисты заметят, что это уже сделано, и украдут это:)

https://github.com/Ciechan/BCGenieEffect - это проект с открытым исходным кодом, предназначенный именно для этого.

2 голосов
/ 08 апреля 2011

Я начинаю собирать эффект анимации джиннов для iPhone по адресу git: //github.com/rmd6502/Genie.git. Сейчас это невыносимо медленно, так как я делаю все вычисления «вручную», а не использую аппаратное обеспечение, но улучшения ожидаются.

Любые опытные разработчики GL, которые хотели бы внести свой вклад, пожалуйста, не стесняйтесь, раскошеливайтесь и отправляйте запросы на получение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...