3

ここの指示に従って、アニメーション中にスクリーンショットをキャプチャしました(ビデオとしてキャプチャするために、アニメーションラベルで UIView を記録しようとしています)

これが私のViewController(getframe)でのスクリーンキャプチャのコードです

-(UIImage*) getCurrentFrame {
    UIGraphicsBeginImageContext(self.view.bounds.size);
CGContextRef mycontext =  UIGraphicsGetCurrentContext();
    [[[self.view layer] presentationLayer] renderInContext:mycontext]; 

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

スクリーンショットのビデオを作成しようとすると、開始フレームのみが繰り返し表示されます。私のスレッド (AVAssetwriter の例を使用) が後続のスクリーンショットを取得すると、スクリーングラブは何も動きません。スクリーングラブは AVAssetWriterInput usingblock の while ループで呼び出されます。

私のアニメーションは、ラベルの単純なコア アニメーションです - 下にスクロールする例

mTextLabel.frame = CGRectMake(mTextLabel.frame.origin.x,
                             -100,
                             mTextLabel.frame.size.width,
                             mTextLabel.frame.size.height);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration: delay];
[UIView setAnimationTransition:UIViewAnimationTransitionNone
                       forView:mTextLabel cache:YES];
mTextLabel.frame = CGRectMake(mTextLabel.frame.origin.x,
                             240,
                             mTextLabel.frame.size.width,
                             mTextLabel.frame.size.height);
[UIView commitAnimations];

古い学校のアニメーションをブロックアニメーションのanimatewithDurationに置き換えてみましたが、同じ結果が得られました

助言がありますか?iOS 6 と最新の xcode を使用 (Quartzcore を正しくインポート)

Apple 開発センター、何かがキャプチャされない可能性があると述べました。

タイマーを使用してアニメーションをステージングし、画面を断続的に取得する別のオプションはありますか (アニメーションをハンドコーディングする必要があります)。

4

1 に答える 1

3

編集-やったー!Appleはついにこれを追加しました-

[view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:NO];

グラフィックスコンテキストの開始呼び出しと終了呼び出しの間をラップします。

------------iOS7以前---------------AppleのCALayerのドキュメントからここに!renderInContextで彼らははっきりと言います

「重要:このメソッドのOS X v10.5実装は、Core Animationコンポジションモデル全体をサポートしていません。QCCompositionLayer、CAOpenGLLayer、およびQTMovieLayerレイヤーはレンダリングされません。さらに、3D変換を使用するレイヤーはレンダリングされず、指定するレイヤーもレンダリングされません。 backgroundFilters、filters、compositingFilter、またはマスク値。OSXの将来のバージョンでは、これらのレイヤーとプロパティのレンダリングのサポートが追加される可能性があります。」

私にとっての唯一のオプションは、サーバー側のソリューションを使用するか、時間tで変換を手動でオーバーレイすることによってアニメーションをフレームごとにハンドコーディングすることです。

于 2013-02-03T21:13:47.013 に答える