2012-03-02 11 views
4

は、私もそれにそれの内側mutiplesの景色を眺めることができ、表示、画像のプレゼンテーション(。別名「カバーフロー」)を持っている...そして、私はプログラム的にスクリーンショットを作成する必要があります! 3Dアニメーションをレンダリングしません:ドキュメント以来は「renderInContext:」とCATransform3D

は「renderInContextは」:と言っている。

「全体Core Animationの組成モデルをサポートしていません。この方法の重要なMac OS Xのバージョン10.5の実装QCCompositionLayer、CAOpenGLLayer、およびQTMovieLayer層はレンダリングされません。また、3Dトランスフォームを使用するレイヤーがレンダリング、またbackgroundFiltersを指定層、フィルタ、compositingFilter、またはマスク値ですされていません。マックOS Xの将来のバージョンでは、これらの層およびプロパティをレンダリングするためのサポートを追加することがあります。」

ソース:https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CALayer_class/Introduction/Introduction.html

私は多くのことを検索し、私の「最良」ソリューション(つまり、すべてが得意ではない)している、私自身のCGContextを作成してそこにすべてのCGアニメーションを記録することです。しかし、私は本当に私は私のアニメーションコードのほとんどを再作成する必要がありますので、それを行うにはしたくない、それはメモリのために非常に高価になるだろう...私は使用OpenGLのように、他のソリューション(当時unmakableの一部)を見つけまたは貫通キャプチャAVSessionsが、私を助けることができる誰も...

私のオプションは何ですか?その問題があれば?お時間を

ありがとう!

答えて

0

私はプロトコルでの作業それを得ました。 ...私はすべてのUIViewsクラスで3D変換を行うプロトコルを実装しています。だから、私がスクリーンショットをリクエストすると、すべてのサブビューをスクリーンショットにして、1つのUIImageを生成します。たくさんのビューには適していませんが、私はいくつかのビューでやっています。

#pragma mark - Protocol implementation 'TDITransitionCustomTransform' 

//Conforms to "TDITransitionCustomTransform" protocol, return currrent image view state , by current layer 

- (UIImage*)imageForCurrentState { 

//Make print 

UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0); 

[self.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage *screenShot = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

//return printed image 

return screenShot; 

} 

私はそれを自己... を形質転換されている変換ビュー層、でレンダリングやっているので、私はそれが今作品をも考えていたそして、それは働いていませんでした「renderInContext:」理由」doesnのそのサブビューのレイヤーを取得する可能性がありますか?

このソリューションのもう少しのコードに関心がある方は、hereをご覧ください。アップルのdevフォーラムで。

+0

おそらく私の前の機能を使用してメインのUIWindowでそれを使うなら、それは自動的にすべてのビューを内部に持っているはずです。しかし、とにかく、あなたはすでにそれを解決しました:) –

0

あなたが実際にそれを試してみましたか?私は現在、いくつかの3D変換してプロジェクトに取り組んでいる、と私はプログラム的にこのスクリーンショットを作成しようとすると、それはここでうまく:) に動作します私が使用するコードです:

-(UIImage *)getScreenshot 
{ 
    CGFloat scale = 1.0; 
    if([[UIScreen mainScreen]respondsToSelector:@selector(scale)]) 
    {   
     CGFloat tmp = [[UIScreen mainScreen]scale]; 
     if (tmp > 1.5) 
     { 
      scale = 2.0;  
     } 
    }  
    if(scale > 1.5) 
    { 
     UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, scale); 
    } 
    else 
    { 
     UIGraphicsBeginImageContext(self.frame.size); 
    }  
    //SELF HERE IS A UIVIEW 
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];  
    UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return screenshot; 
} 
+0

あなたはどの変換を使用していますか? –

+0

ええ、私は試しました!実際の問題は、変換されたビューは、私がそれをスクリーンショット用にレンダリングしていたビューの子であるということです。 – gwdp

0

は、あなたが代わりにCATransform3DMakeRotationのコアGraphaic :)

CGAffineTransform flip = CGAffineTransformMakeScale(1.0, -1.0); 

effetの取得に使用することができますすることができる...それは機能のバグであってもよいし、それだけで、この目的のために設計されていませんrenderInContext

関連する問題