2013-09-09 2 views
1

Я пытаюсь создать приложение с функцией, подобной темпам чата facebook.Создание глобального UIView

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

Для этого я создал класс InCallViewController, который позволит пользователю подключиться к другому человеку. После подключения видео отображается в виде. Это представление является подвижным (подобно чатам для чата facebook) и отлично отображает видеочат, однако, когда я выхожу из страницы и перехожу на другую страницу (AccountViewController) в приложение, я не могу сохранить это представление на экране. Я пробовал много вещей, включая установку этого представления в качестве подзаголовка на последующих страницах. Однако, когда я это делаю, subview не отображается.

MyAccountView.m

- (void)viewDidLoad 
{ 


    [super viewDidLoad]; 

    InCallViewController *inCallViewController = [[InCallViewController alloc] initWithNibName:@"InCallViewController" bundle:nil]; 

    [self.view addSubview:inCallViewController.previewView]; 
    [self.view bringSubviewToFront:inCallViewController.previewView]; 

    (Do some other set up stuff) 

} 

InCallViewController.h

@interface InCallViewController : UIViewController <UIAlertViewDelegate> 
{ 

    CGPoint currentTouch; 
    NSArray *viewArray; 
    AVAudioPlayer *audioPlayer; 
} 

@property (weak, nonatomic) IBOutlet UIView *previewVideoView; 

previewView является UIView в классе InCallViewController. Это подключено в IB и отлично работает, когда в классе InCallController. Проблема в том, что он не будет отображаться при добавлении его в качестве подвью в другом классе. Мне интересно, что я делаю неправильно, или если есть лучший способ оставить «previewView» оставшимся на экране после выхода из InCallViewController.

Благодаря

ответ

0

Вы можете добавить previewView к [[UIApplication sharedApplication] keyWindow] как подвид, так что она появляется на все ваши взгляды и над каждым из них.

+0

Не могли бы вы показать мне, как это сделать? Когда я попробовал "[[[UAppication sharedApplication] keyWindow] addSubview: _previewVideoView];" В результате получилось Исключение «NSGenericException», причина: «Невозможно установить ограничение на просмотр. Связано ли ограничение с чем-то извне поддерева представления? Это незаконно. Ограничение: view:

+0

Похоже, у вас есть ограничение AutoLayout, определенное для предварительного просмотра, которое вызывает эту ошибку, поскольку ограничение должно применяться к родительскому представлению всех представлений, которые являются частью этого ограничения. Должно ли ограничение автоопределения нуждаться в предварительном просмотре? Если это так, вам придется добавить его в keyWindow или изменить свое ограничение, чтобы больше не ссылаться на previewView. –

+0

Удивительный! Это сработало! Все, что мне нужно было сделать, это вынуть «автоспуск». знаете, если мне нужно будет поместить код для управления этим представлением (перемещать его) в appDelegate? Я не уверен, куда будет идти код для выполнения некоторых действий на этом представлении. –

1

Вам следует рассмотреть возможность создания контейнера viewController. С iOS6 и xcode 4.5 это было сделано довольно просто. Сдерживающий viewController может обрабатывать ваши PreviewViews, которые накладываются поверх любого вида ControlController, содержащегося в нем. Вы можете сравнить то, что вы хотите достичь, с помощью того, что Apple сделала с помощью UInavigationController (также контроллера контейнера): он содержит viewController, который с радостью показывает свой контент, но navigationController гарантирует, что navigationBar всегда присутствует для всех viewControllers, даже во время анимации. У Apple есть хорошая документация и даже сессия WWDC.

Взлом вашего пути в [[UIApplication sharedApplication] keyWindow] - очень плохой дизайн и вопиющее нарушение шаблона MVC. Это работает, но это взломать, тем не менее, и может дать вам головные боли в будущем.

Смежные вопросы