1

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

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

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

我的帐户视图.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 是 InCallViewController 类中的一个 UIView。这是在 IB 中连接的,并且在 InCallController 类中可以完美运行。问题是,将其添加为另一个类中的子视图时它不会显示。我想知道我做错了什么,或者在我退出 InCallViewController 后是否有更好的方法让“previewView”保留在屏幕上。

谢谢

4

2 回答 2

2

您应该考虑实现一个容器 viewController。从 iOS6 和 xcode 4.5 开始,这变得非常简单。包含视图控制器可以处理您的预览视图,这些预览视图覆盖在当前包含在其中的任何视图控制器上。您可以将您想要实现的目标与 Apple 通过 UInavigationController(也是一个容器视图控制器)实现的目标进行比较:它包含可以愉快地显示其内容的 viewController,但 navigationController 确保对于所有 viewController,navigationBar 始终存在,甚至在动画期间。Apple 有一些很好的文档,甚至还有一个 WWDC 会议。

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

于 2013-09-09T20:28:21.223 回答
0

您可以将 previewView 添加[[UIApplication sharedApplication] keyWindow]为子视图,以便它出现在您的所有视图上以及每个视图之上。

于 2013-09-09T19:39:16.890 回答