我正在尝试创建一个具有类似于 facebook 的聊天气泡功能的应用程序。
当用户导航到某个页面 (InCallViewController) 时,他们可以通过视频聊天连接到另一个人。当他们在连接后导航离开此页面时,我希望视频 View 保持 float 在屏幕上,但允许他们在应用程序中做他们想做的事。
为此,我创建了一个 InCallViewController 类,它允许用户与其他人联系。连接后,视频将显示在 View 中。这个 View 是可移动的(类似于 facebook 的聊天气泡)并且可以完美地显示视频聊天,但是当我退出页面并转到应用程序中的另一个页面(AccountViewController)时,我无法将这个 View 保留在屏幕上。我尝试了很多东西,包括在后面的页面中将此 View 设置为 subview 。但是,当我这样做时, subview 不显示。
我的账户 View .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 类中时完美运行。问题是,将它添加为另一个类中的 subview 时它不会显示。我想知道我做错了什么,或者是否有更好的方法在我退出 InCallViewController 后将“previewView”保留在屏幕上。
谢谢
最佳答案
您应该考虑实现一个容器 viewController。从 iOS6 和 xcode 4.5 开始,这变得非常简单。 包含的 viewController 可以处理您的预览 View ,这些预览 View 覆盖在当前包含在其中的任何 viewController 上。 您可以将您想要实现的目标与 Apple 使用 UInavigationController(也是容器 View Controller )实现的目标进行比较:它包含愉快地显示其内容的 viewController,但 navigationController 确保 navigationBar 始终存在,对于所有 viewController,甚至在动画期间。 Apple 有一些很好的文档,甚至还有关于此的 WWDC session 。
侵入 [[UIApplication sharedApplication] keyWindow] 是非常糟糕的设计,并且公然违反了 MVC 模式。它有效,但它仍然是一种 hack,将来可能会让你头疼。
关于ios - 创建全局 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18705532/