Core Animation - или, точнее, модель анимации UIView, построенная на Core Animation - ваш друг.Вы можете создать интерфейс, похожий на Time Machine, с вашими представлениями, расположив их в вертикальной линии в пределах их родительского представления (используя их свойства center
), при этом те, которые находятся дальше по этой линии, масштабируются немного меньше, чем те, что ниже (front ”) их (используя их свойства transform
, с функцией CGAffineTransformMakeScale
) и установив z-index их слоев (получите слой, используя свойство layer
представления, затем установите его zPosition
) так, чтобыте, что дальше по линии, появляются позади других.Вот пример кода.
// animate an array of views into a stack at an offset position (0 has the first view in the stack at the front; higher values move "into" the stack)
// took the shortcut here of not setting the views' layers' z-indices; this will work if the backmost views are added first, but otherwise you'll need to set the zPosition values before doing this
int offset = 0;
[UIView animateWithDuration:0.3 animations:^{
CGFloat maxScale = 0.8; // frontmost visible view will be at 80% scale
CGFloat minScale = 0.2; // farthest-back view will be at 40% scale
CGFloat centerX = 160; // horizontal center
CGFloat frontCenterY = 280; // vertical center of frontmost visible view
CGFloat backCenterY = 80; // vertical center of farthest-back view
for(int i = 0; i < [viewStack count]; i++)
{
float distance = (float)(i - offset) / [viewStack count];
UIView *v = [viewStack objectAtIndex:i];
v.transform = CGAffineTransformMakeScale(maxScale + (minScale - maxScale) * distance, maxScale + (minScale - maxScale) * distance);
v.alpha = (i - offset > 0) ? (1 - distance) : 0; // views that have disappeared behind the screen get no opacity; views still visible fade as their distance increases
v.center = CGPointMake(centerX, frontCenterY + (backCenterY - frontCenterY) * distance);
}
}];
А вот как это выглядит с парой случайных цветов: