Вероятно, это будет простой эффект 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 (например, представление карты или веб-представление), то представление превратится в цвет фона и, вероятно, не исчезнет снова, пока анимация не закончится. Точно так же любое представление, которое решает, как рисовать на основе размера кадра, будет отображаться не в масштабе, а только для изменения размера.