0

私は iPhone アプリを持っています。魔女はビデオを録画できます。問題は向きです。常に縦向きです。デバイスの向きを検出し、ビデオを正しい向きで保存する必要があります。

// setup video recording
mRecordingDelegate = new RecordingDelegate();

// setup the input Video part
mCaptureVideoInput = new AVCaptureDeviceInput(AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video), out mVideoError);

//Audio part
mCaptureAudioInput = new AVCaptureDeviceInput(AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Audio), out mAudioError);

// setup the capture session
mCaptureSession = new AVCaptureSession();
mCaptureSession.SessionPreset = AVCaptureSession.PresetMedium;
mCaptureSession.AddInput(mCaptureVideoInput);
mCaptureSession.AddInput(mCaptureAudioInput);

// setup the output
mCaptureOutput = new AVCaptureMovieFileOutput();
mCaptureOutput.MaxRecordedDuration = MonoTouch.CoreMedia.CMTime.FromSeconds(VideoLength, 1);

//add Output to session
mCaptureSession.AddOutput(mCaptureOutput);

// add preview layer 
mPrevLayer = new AVCaptureVideoPreviewLayer(mCaptureSession);
mPrevLayer.Frame = new RectangleF(0, 0, 320, 480);
mPrevLayer.BackgroundColor = UIColor.Clear.CGColor;
mPrevLayer.VideoGravity = "AVLayerVideoGravityResize";

// Show video output
mCaptureSession.CommitConfiguration();
mCaptureSession.StartRunning();

RecordingDelegate.Stopped += delegate {
    if(recording)
        OnBtnStopRecordingVideo();
};

// add subviews
this.InvokeOnMainThread (delegate
{
    this.View.Layer.AddSublayer (mPrevLayer);
});
4

1 に答える 1

1

1. 基本

核心に入る前に、まずインターフェイスの向きの変更がどのように機能し、どのように対応する必要があるかをおさらいしましょう。まず、ビューを自動回転させたい場合は、メソッド shouldAutorotateToInterfaceOrientation: をオーバーライドして YES を返す必要があります。特定の条件下でのみ自動回転を許可する場合は、このメソッドでこの条件のテストを行うこともできます。

これは、自動回転を許可するために行う必要がある最も基本的なことですが、非常に便利なオーバーライド可能な追加のメソッドがあります。これらの方法は、

willRotateToInterfaceOrientation

didRotateFromInterfaceOrientation

willAnimateFirstHalfOfRotationToInterfaceOrientation

willAnimateSecondHalfOfRotationFromInterfaceOrientation

最初の 2 つの方法は、回転の前処理と後処理を行うのに非常に役立ちます。ビュー コントローラーを初期化するか、willRotateToInterfaceOrientation で現在のビューにいくつかのビューを追加することができます。2 番目の 2 つは、ほぼ自明です。ローテーションの特定のフェーズで追加の操作を実行する場合は、それらも実装できます。

ビュー コントローラーの向きを操作する場合の別の非常に便利なコード例は次のとおりです。

if(UIInterfaceOrientationIsLandscape(interfaceOrientation)){

    //do some processing…

}else if(UIInterfaceOrientationIsPortrait(interfaceOrientation)){

    //do different processing…
}
else if(UIDeviceOrientationIsValidInterfaceOrientation(interfaceOrientation)){

    //do something
}

NB:説明はここから貼り付けました。詳細については投稿をご覧ください。

2.この投稿は、ビデオの向きを変更するのに役立ちます

于 2012-08-21T12:11:30.767 に答える