我正在尝试使用类似于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;
previewView是InCallViewController类中的UIView。它连接在IB中,在InCallController类中完美运行。问题是,在另一个类中将其添加为子视图时,它不会显示出来。我想知道我做错了什么,或者在退出InCallViewController之后是否有更好的方法让“previewView”保留在屏幕上。
由于
答案 0 :(得分:2)
您应该考虑实现容器viewController。从iOS6和xcode 4.5开始,这一点非常简单。 包含viewController可以处理你的previewViews,它们覆盖在当前包含的viewController中。 您可以将您想要实现的内容与Apple使用UInavigationController(也是容器视图控制器)实现的目标进行比较:它包含愉快地显示其内容的viewController,但是navigationController确保了navigationBar始终存在,对于所有viewControllers,甚至在动画期间。 Apple有一些很好的文档,甚至是WWDC会议。
黑客入侵[[UIApplication sharedApplication] keyWindow]是极其糟糕的设计,并且公然违反了MVC模式。它有效,但它仍然是一个黑客,可能会让你在将来头疼。
答案 1 :(得分:0)
您可以将预览添加到[[UIApplication sharedApplication] keyWindow]
作为子视图,以便它显示在所有视图上以及每个视图上方。