2013-05-26 6 views
1

Я работаю над анимацией uiview (родительский вид с именем «popupVw»), который содержит 11 подзонов (7 кнопок, 2 метки, 2 изображения). Первоначально размер рама:Изменение фреймворка uiview с анимацией, не меняя рамки вложенных объектов автоматически

CGRect Frame = CGRectMake(10, 10 ,320, 0); 

& новый размер кадра:

CGRect newFrame = CGRectMake(10, 10 ,320, 300); 



[UIView animateWithDuration:0.5 
       animations:^{popupVw.frame = newFrame;} 
       completion:^(BOOL finished){ 
        // do stuff here after animation finished 
       }]; 

Поэтому в основном я меняюсь высоту обзора от 0 до 300. &, затем от 300 до 0 раз. для достижения анимации show hide.

Рассматривайте это как всплывающее окно в середине экрана, отображаемое от 0 до 300 высоты. Это всплывающее окно содержит subviews & кнопку закрытия в верхнем правом углу. Нажимая эту кнопку закрытия, всплывающее окно снова уменьшается до высоты от 300 до 0. Родительское всплывающее представление анимируется правильно. Но субвизоры видны до того, как высота увеличивается до максимума. & видно до тех пор, пока высота родительского вида не вернется к 0. Таким образом, в основном только родительский вид анимации & не является внутренним.

Анимация работает правильно на родительском представлении, но субвью не анимируется с родительским представлением. В результате, когда я изменяю высоту uiview от 300 до 0, тогда все подзоны все еще видны & только высота родительского uiview становится 0.

Нужно ли мне анимацию для них отдельно? если да, то как я могу это сделать для изменения высоты? Или есть ли другой подход, который я могу использовать для достижения того же результата?

Я пробовал авторезистирующую маску. но это не работает для меня:

pointerImgVw.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin ; 

Ниже приведены srceengrabs задачи:

enter image description here enter image description here enter image description here

Поперечное кнопку в верхнем правом углу подтаблицы оживлённой всплывающего окна. То, что я хочу, - это крестовая кнопка не должна быть вне анимационного представления. Например, во втором скриншоте должна быть видна только кнопка с половинной поперечностью. Внешняя часть не должна быть видимой.

+0

Попробуйте UIViewAutoresizingFlexibleHeight вместо этого. –

+0

@verbumdei Я попытался использовать UIViewAutoresizingFlexibleHeight, но он просто увеличивает высоту subview с размером родительского представления. Я имею в виду .если высота parentView возрастает от 0 до 300, то также возрастает высота subview. – stackNeverFlow

+0

Как вы хотите, чтобы подвид рассматривался? Или просто установите clipToBounds? –

ответ

8

Задавайте clipsToBounds свойство родительского вида, чтобы ДА

parentView.clipsToBounds = т.е. ДА

1

Попробуйте использовать options:UIViewAnimationOptionLayoutSubviews.

[UIView animateWithDuration:0.5 
          delay:0.0 
         options:UIViewAnimationOptionLayoutSubviews 
        animations:^{ 
         // animate here... 
        } 
        completion:nil]; 

EDIT: ОК, получил его. Затем вам нужно иметь другое представление (назовем его coverView) внутри вашего анимационного представления. CoverView будет иметь тот же размер, что и анимационный вид, и будет поверх всех других подзонов, поэтому он скрывает их. Теперь, когда вы оживляете открытое представление, вы должны анимировать coverView, чтобы исчезнуть, и наоборот.

+0

Нет, я не могу этого сделать, потому что мой основной родительский кадр лежит посередине экрана и начинает отображаться с середины экрана. Нет другого взгляда, за которым я могу скрыть это оживляющее представление. вы предлагаете анимацию слайдов/слайдов, в которой высота кадра остается фиксированной. – stackNeverFlow

+0

Не могли бы вы приложить скриншот того, как вид выглядит открытым и закрытым? Нам будет легче помочь вам найти решение. –

+0

Привет @Eli Ganem, Добавлены скриншоты. – stackNeverFlow