CALayerって何ぞ?

UIViewは入れ子にできてUIViewControllerのviewプロパティのUIViewにaddSubViewで階層構造にできる。
まぁこの辺は普通に使ってるし理解してるつもり。


で、

    UIGraphicsBeginImageContext(screenRect.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    self.screenShot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();


とかやってスクリーンショットを取ってるんだけど、self.view上に配置しているUIImageViewがスクリーンショットに映らない。。。


たぶんUIImageViewのanimationImagesに画像を複数つっこんでアニメーションさせてるからなんだろうなぁ。。。
layerとかが何か関係しているんだろうなぁ。。。


って事でCALayerについて調べてみる。

CALayerとそのご近所

CALayerクラスはQuartzCore.frameworkに含まれているらしい。


でーQuartzCore.frameworkを調べているとQuartzCore自体のドキュメントって存在しないみたい。
どーしてもCore Animationに行きついてしまう。


って事で QuartzCore = Core Animation と理解
Core Animation Programming Guide ってのもあるし。そこにCALayer出てくるし。


Core Animation Programming GuideによるとCore Animationとはgraphics rendering, projection, animation用クラスの集合体であるって書いてある。
で、Core Animationのクラスは基本的にQuartz Core frameworkに含まれているけど、一部別のframeworkにも含まれているらしい。

ふむ。
Quartz Composer frameworkとQTKit frameworkの事かな。


という事は細かい事を言うと QuartzCore は Core Animation だけど、Core Animation は Quartz Coreだけじゃないって事か。ややこしいな。




そういやQuartzCoreとかCore Animationと言えば何か似たような単語が他にもあるなぁ


QuartzCoreとごっちゃになるのがQuartz2D。これは何だろう?
あとCore Graphicsってのも気になるCore Animation は graphics も含まれてるんじゃなかったの?

Quartz2Dって何よ

ごそごそ探していると Quartz 2D Programing Guide を発見。
それによると Quartz 2D とは2次元描画エンジンのAPIとの事。

んー framework と class collection と API か。。。。混沌としてきた。


あ、APIってCの関数群って事?
なんかそんな気がしてきた。


つまり、ごそごそ描画するにはQuartzCoreに含まれているCore Animation ClassesにたいしてQuartz 2D APIでごにょごにょするって事かな?

そういえば Quartz 2D APIってCGhogehogeだけど、このCGってCore Graphics framework???

次はCore Graphics framework

Core Graphics framework Reference ってのがあった。framework はreferenceがあるのね。
で、Core Animation はframeworkじゃないのでPrograming Guideなのか。ふむふむ


で、referenceによるとCore Graphics frameworkとはQuartzエンジンをベースとしたCのAPIです。だそうです。
低レベル、軽量2Dレンダリングを提供してくれるらしく、このフレームワークを使えばパスが書けたりトランジションできたり色々山盛りだと。


んーQuartz Coreいらなくね? Core Graphicsだけでよくね?


と、思ったんだけどlayer使うならQuartz Coreがいるのか。
なるへそ・ザ・ワールド




ちょ。。。




CGLayerって何wwww

CGLayerとCALayer

cocoa - What's the difference and compatibility of CGLayer and CALayer? - Stack Overflow はい。そのものずばり。


CALayerは入れもので、表示されてる実態がCGLayerと理解。

まとめ

CALayerは入れもので、表示されてる実態がCGLayerと理解。

これに行き着いたのがbreak throughかも。


Core Animation は入れ物で Core Graphicsが実態。


Core Animationでステージを用意し、Core Graphicsで絵を書く。
Core Animationで操作すればCore Graphicsで書いた絵を切替えたり表示する部分を限定したり拡大したり色々できる。


みたいな感じ




で、あってる???



つまり絵の書き方についてはCore Graphics(Quartz2D)を調べ、表示のさせ方についてはCore Animation(Quartz Core)だと。






で、あってる?????






と、いう事でスクショがうまくとれないのはCore Animationを勉強すればいいらしい。(で、たぶんCALayerの管理に行きつく)