iOS: для реализации анимации Кена Бернса требуются неожиданные параметры - PullRequest
3 голосов
/ 26 февраля 2011

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

image.frame = // some frame that zooms in on the image;
image.center = // tip of the nose

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

image.frame = // original frame
image.center = // original centerpoint

[UIView commitAnimations];

В Photoshop координаты кончика носа полностью отличаются от значений, которые мне пришлось ввести в приведенный выше код, чтобы фактически центрировать изображениена носу, когда начинается анимация.Я попытался отразить оси, умножив их на коэффициент масштаба ... и я не могу понять, почему цифры iOS значительны, а не те, которые я вывел из Photoshop.

Может кто-то указать на несоответствиемежду двумя системами координат?

Некоторая дополнительная информация:

  • image является UIImageView и является непосредственным потомком UIViewController
  • Указанный UIViewController ориентирован горизонтально- все приложение работает в ландшафтном режиме.

Ответы [ 2 ]

3 голосов
/ 26 февраля 2011

Установка как кадра, так и центра немного избыточна.Фрейма должно хватить, поскольку вы теряете какую-то часть настройки.

РЕДАКТИРОВАТЬ: Точнее, у вас должно быть только два кадра для настройки, и CoreAnimation сделает остальное.

2 голосов
/ 27 февраля 2011

Проблема в том, что анимация происходит каким-то сложным образом. Неважно, как именно, но приводит к этому. Вы не можете установить исходные параметры и анимировать их одним способом. Вы должны установить начальные параметры, а затем отправить сообщение [self executeSelector: withObject: afterDelay:], где будет происходить анимация (все сообщения [UIView * animation]).

Итак, ваш код будет выглядеть так.

- (void)one {
    image.frame = // some frame that zooms in on the image;
    image.center = // tip of the nose

    [self performSelector:@selector(two) withObject:nil afterDelay:0];
}

- (void)two {
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:3];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    image.frame = // original frame
    image.center = // original centerpoint

    [UIView commitAnimations];
}
...