Переход UiView внутри UIView - PullRequest
       6

Переход UiView внутри UIView

2 голосов
/ 06 декабря 2010

это похоже на вопрос новичка, но, поскольку я не могу заставить его работать по намеченному способу, я надеюсь, что где-то там сможет указать мне правильное направление.

Что яЯ пытаюсь достичь перехода от одного вида к другому.Я принципиально хочу заменить представление внутри представления другим содержимым представления (контроллер?!?).

Допустим, у меня есть изображение книги, и я хочу сделать переход внутри книги кдругая страница (например, переход от календарного просмотра к подробному ежедневному просмотру).Я хочу, чтобы в этот переход был включен только контент книги (область белого содержимого), а не вся книга (весь экран).

Я могу выполнить переход с тем же видом, без проблем, но я не получаю его работу, пытаясь заменить представление совершенно другим представлением.Не имело значения наличие представлений в отдельных контроллерах представления или всех представлений в одном контроллере представления, поэтому я пока не смог заставить его работать, но, что еще хуже, у меня заканчиваются идеи.ПОМОГИТЕ!Пожалуйста, кто-нибудь там может быть таким добрым и сказать мне, что я делаю неправильно.Предложения также очень ценятся.Спасибо !!

Том

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

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

[UIView beginAnimations:nil context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view1.view cache:YES];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view2.view cache:YES];
[UIView setAnimationDuration: 1.5];
[UIView commitAnimations];

view1.view.hidden = YES;
view2.view.hidden = NO;

Редактировать: Это то, что вы искали?

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
[view1 viewWillDisappear:YES];
[view2 viewWillAppear:YES];

view1.view.hidden = YES;
view2.view.hidden = NO;
[view1 viewDidDisappear:YES];
[view2 viewDidAppear:YES];
[UIView commitAnimations];

Или , вы можете использовать что-то вроде этого:

[UIView animateWithDuration:0.5
                  delay:0.0 
                options:UIViewAnimationOptionTransitionFlipFromRight 
             animations:^{
                             [view1 removeFromSuperview];
                             [mySuperview addSubview:view2]; 
                         }
             completion:nil];
1 голос
/ 06 декабря 2010

Проверьте метод exchangeSubviewsAtIndex: в классе UIView .Просто установите 2 вида, из которых вы хотите перейти, и в качестве подпредставлений другого вида;затем вызовите этот метод в родительском представлении.

0 голосов
/ 06 декабря 2010

Предположим, у вас есть контроллер представления с двумя представлениями, A и B. Они имеют идентичные кадры, поэтому они занимают одно и то же пространство в представлении контроллера, для ваших целей отображение страницы книги.Вы хотите отобразить одно и перейти к другому.

Одним из способов было бы установить свойство alpha для одного равным 1,0 (непрозрачное), а другим равным 0,0 (прозрачное).Поскольку это свойство может быть анимированным, вы можете сделать переход от одного к другому, используя beginAnimations: context / commitAnimations, или использовать один из блочных методов, как советуют docs.

Другим способом было бы анимировать изменение кадра в двух видах.Настройте представления так, чтобы у одного был фрейм, чтобы он находился в нужном месте для отображения, у другого - тот же фрейм, но с frame.origin.x, равным frame.size.width - он будет скрыт, потому что он-экран или скрытый за какой-то другой вид.Анимируйте кадр, установив frame.origin.x представления A в -frame.size.width и frame.origin.x кадра B в положение отображения x origin.Затем снова установите (без анимации) frame.origin.x для фрейма A. в frame.origin.width, обновите его содержимое, и вы готовы вставить другую страницу справа.

...