Ios 创建全局UIView

Ios 创建全局UIView,ios,objective-c,uiview,uiviewcontroller,Ios,Objective C,Uiview,Uiviewcontroller,我正在尝试创建一个具有类似facebook聊天泡泡功能的应用程序 当用户导航到某个页面(InCallViewController)时,他们可以通过视频聊天连接到另一个人。当他们连接后导航出此页面时,我希望视频视图在屏幕上保持浮动,但允许他们在应用程序中做任何想做的事情 为了做到这一点,我创建了一个InCallViewController类,它将允许用户与其他人连接。连接后,视频将显示在视图中。此视图是可移动的(类似于facebook的聊天泡泡),可以完美地显示视频聊天,但是当我退出页面并转到应用

我正在尝试创建一个具有类似facebook聊天泡泡功能的应用程序

当用户导航到某个页面(InCallViewController)时,他们可以通过视频聊天连接到另一个人。当他们连接后导航出此页面时,我希望视频视图在屏幕上保持浮动,但允许他们在应用程序中做任何想做的事情

为了做到这一点,我创建了一个InCallViewController类,它将允许用户与其他人连接。连接后,视频将显示在视图中。此视图是可移动的(类似于facebook的聊天泡泡),可以完美地显示视频聊天,但是当我退出页面并转到应用程序中的另一个页面(AccountViewController)时,我无法将此视图保留在屏幕上。我尝试了很多方法,包括在后面的页面中将此视图设置为子视图。但是,执行此操作时,不会显示子视图

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;
AllViewController中的界面:UIViewController { 点电流接触; NSArray*视图阵列; AVAudioPlayer*音频播放器; } @属性(弱,非原子)IBUIView*previewVideoView; previewView是InCallViewController类中的UIView。这是在IB中连接的,在InCallController类中可以完美地工作。问题是,在另一个类中将其作为子视图添加时,它不会显示。我想知道我做错了什么,或者是否有更好的方法在退出InCallViewController后保持“previewView”在屏幕上


谢谢

< p>可以将预览视图添加到<代码> [[UpApple SysDepApdio]键窗口] < /Cube >作为子视图,以便它出现在您的所有视图和上面的每一个视图中。

< P>您应该考虑实现容器VIEW控制器。自从iOS6和xcode4.5以来,这已经变得非常简单了。 包含的viewController可以处理覆盖在当前包含在其中的任何viewController上的预览视图。 您可以将您想要实现的内容与Apple通过UInavigationController(也是容器视图控制器)实现的内容进行比较:它包含愉快地显示其内容的viewController,但navigationController确保所有viewController的navigationBar始终存在,即使在动画期间也是如此。 苹果有一些很好的文档,甚至有一个WWDC会议


黑客入侵[[UIApplication sharedApplication]keyWindow]是非常糟糕的设计,是对MVC模式的公然违反。它是有效的,但它仍然是一个黑客程序,将来可能会让你头疼。

你能告诉我怎么做吗?当我尝试“[[UIApplication sharedApplication]keyWindow]addSubview:\u previewVideoView];”时,结果是异常'NSGenericeException',原因:'无法在视图上安装约束。约束是否引用了视图子树之外的内容?那是违法的。约束:视图:看起来您为previewView定义了一个自动布局约束,这导致了此错误,因为该约束需要应用于属于该约束的所有视图的父视图。自动布局约束是否需要previewView?如果是这样,你必须将它添加到keyWindow,或者修改你的约束,使其不再引用previewView。太棒了!这成功了!我所要做的就是拿出“自动布局”。您知道我是否需要在appDelegate中放置控制此视图(移动它)的代码吗?我不确定代码将在这个视图上执行一些操作。未来已经到来<代码>关键窗口不推荐使用场景支持。