1

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」を画面に残しておくためのより良い方法があるかどうか疑問に思っています。

ありがとう

4

2 に答える 2

2

コンテナ viewController の実装を検討する必要があります。iOS6 と xcode 4.5 以降、これは非常に簡単になりました。含まれているviewControllerは、現在含まれているviewControllerにオーバーレイされるpreviewViewsを処理できます。達成したいことと、Apple が UInavigationController (コンテナー ビュー コントローラーでもあります) を使用して達成したことを比較できます。これには、コンテンツを喜んで表示している viewController が含まれていますが、navigationController は、すべての viewController に対して、navigationBar が常に存在することを確認します。アニメーション中。Apple には優れたドキュメントがあり、これに関する WWDC セッションさえあります。

[[UIApplication sharedApplication] keyWindow] へのハッキングは、非常に貧弱な設計であり、MVC パターンのあからさまな違反です。それは機能しますが、それでもハックであり、将来的に頭痛の種になる可能性があります.

于 2013-09-09T20:28:21.223 に答える