创建一个全局UIView

时间:2013-09-09 19:29:44

标签: ios objective-c uiview uiviewcontroller

我正在尝试使用类似于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”保留在屏幕上。

由于

2 个答案:

答案 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]作为子视图,以便它显示在所有视图上以及每个视图上方。