iPad Safari-подобный вид уменьшенных изображений - PullRequest
1 голос
/ 04 ноября 2010

Прежде всего, у меня большой опыт разработки под iOS, но я не очень увлечен Core Animation. Я хотел бы воспроизвести эффект в Safari (как на iPhone, так и на iPad), когда просматриваемая страница сжимается и «уменьшается» в виде миниатюр, а после выбора миниатюры она «увеличивает» и соответствующая страница восстановлена.

Каков наилучший способ сделать это? Я бы применил его к обычному подклассу UIView - не к UIWebView - но я не очень уверен в том, как сделать весь эффект сжатия, и как указать целевой кадр для уменьшенного миниатюры (предположим, у меня на экране много миниатюр Я хотел бы поместить текущий вид в определенный эскиз).

Best

1 Ответ

2 голосов
/ 12 ноября 2010

Вероятно, это будет простой эффект CoreAnimation, настраивающий преобразование вида, а не фрейма. Это должно работать на любом виде. Я оптимистичен, что у вас недостаток увлеченности - это незнакомство, а не настоящая неприязнь, поэтому я продолжу с ответом CoreAnimation, если это будет полезно ...

В UIView есть действительно удобный метод настройки анимации. Например, чтобы сделать анимированное сжатие вида наполовину, оставив его в центре в том же месте:

[UIView beginAnimations:nil context:nil];
view.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
[UIView commitAnimations];

Чтобы уменьшить его и сместить его центр на 50 пикселей вправо:

[UIView beginAnimations:nil context:nil];
view.transform = CGAffineTransformTranslate(CGAffineTransformMakeScale(0.5f, 0.5f), 50.0f, 0.0f);
[UIView commitAnimations];

И чтобы вернуть его в нормальное состояние из любого состояния:

[UIView beginAnimations:nil context:nil];
webView.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
[UIView commitAnimations];

Теория, лежащая в основе этого, заключается в том, что некоторые свойства представлений являются анимируемыми. Это свойства, которые CoreAnimation может настраивать как часть текущей анимации самостоятельно. методы класса UIView устанавливают beginAnimations: context: и commitAnimations, а затем начинают блок CoreAnimation. По сути, каждое изменение, которое вы вносите в анимируемое свойство после beginAnimations: context: не вступает в силу немедленно, а настроено в качестве целевого состояния анимации. Когда вы выполняете commitAnimations, анимация происходит.

Существует множество других элементов управления, которые можно использовать для настройки анимации с помощью удобных методов UIView, все они описаны в документации UIView.

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

Определенно придерживайтесь преобразования, а не корректируйте кадр, если можете; настройка преобразования изменяет способ добавления вида на экран. Это не вызывает перерисовку самого представления. Поэтому, если вы измените масштаб, это все равно, что увеличить изображение вида. Если вы измените фрейм или границы, то iOS откажется от своего текущего буфера того, как выглядит представление, и запросит перерисовку, которая стоит намного дороже. Что еще хуже, если у вас есть что-то, что находится на CATiledLayer (например, представление карты или веб-представление), то представление превратится в цвет фона и, вероятно, не исчезнет снова, пока анимация не закончится. Точно так же любое представление, которое решает, как рисовать на основе размера кадра, будет отображаться не в масштабе, а только для изменения размера.

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