Знаю, что прошло уже два месяца, но наткнулся случайно и решил ответить.
Собственно, создайте слои с шейпом и текстом. У шейпа ключевыми кадрами задаете начальное и конечное положение (метод
Position; "горячая клавиша"
P).
В метод
Position слоя с текстом впишите следующее выражение:
x = transform.position[0];
y = transform.position[1];
shape_y = thisComp.layer("Shape Layer 1").transform.position[1];
if ( shape_y > y ) {
[x,y];
} else {
[x,shape_y];
}
Логика работы.
Выражение считывает текущие значения позиций по оси Y у обоих слоев. Так как слой с шейпом находится ниже текста, то у него начальное значение будет больше. И пока оно остается таковым, у текста позиция не изменится. Когда они сравняются, позиция текста по оси Y будет получаться от шейпа.
Дополнение. Если вы хотите автоматически подгонять размер шейпа под размер надписи, то впишите следующее выражение в свойство
Rectangle> Rectangle Path> Size:
margin = 14;
text_width = thisComp.layer("Sample").sourceRectAtTime().width;
text_height = thisComp.layer("Sample").sourceRectAtTime().height;
box_width = text_width + margin*4;
box_height = text_height + margin*2;
[box_width, box_height]
Настройки отступов по вкусу. Название слоя с текстом в вашем случае будет иным - не забудьте его изменить или добавьте указать по индексу, чтобы каждый раз не менять название.
Последний код в измененном виде взят с просторов интернета.