2011年8月2日火曜日

Cocoa CALayer勉強開始

ちょっことだけ始めていたNSViewのアニメーションの勉強の続き。
どうせ勉強するなら見た目の派手さを演出する方法を知る(努力をする)のも悪くないだろう、という判断。実を結ぶかどうかは怪しいわけだが。

「CALayer」だけでググると、iOSのUIView関係の資料やらblogがどんどん出てくる。これを「Cocoa CALayer」に変えると、一気に英語サイトが増えてしまう。Cocoaが下火なのではなく、iOSがお盛んなんでありましょう。

さて行き着いた

【特集】Leopardのアニメーションを簡単実装! Core Animationを使いこなす (3) レイヤーの使用法 | エンタープライズ | マイコミジャーナル

これって以前にも一度、チュートリアルとしてひと通り試したぞ、全然忘れてるけど。

木下誠氏の解説はツボをおさえてあってわかりやすいなあ。初学者の気持ちっていうか心持ちっていうかをよくわかっていらっしゃる。

本日は木下誠氏の教え通りに、Controller.mにawakeFromNibを書いて、ウィンドウを表示して終了。

(void)awakeFromNib{
    CGImageRef ckyImage;
    CALayer* ckLayer;
    NSMutableString* fileName=[NSMutableString stringWithString:NSHomeDirectory()];
    [fileName appendString:@"/IMG2.jpg"];
    
    NSBitmapImageRep* image=[NSBitmapImageRep  imageRepWithContentsOfFile:fileName];
    ckyImage=[image  CGImage]; 
    ckLayer=[CALayer layer];
    ckLayer.contents=(id)ckyImage;
    ckLayer.frame=CGRectMake(0, 0, 128, 80);
    
    CALayer*    backgroundLayer;
    CGColorRef  blackColor;
    backgroundLayer = [CALayer layer];
    blackColor = CGColorCreateGenericGray(0, 1.0f);
    backgroundLayer.backgroundColor = blackColor;
    CGColorRelease(blackColor);
    [backgroundLayer addSublayer:ckLayer];
    
    [testView setLayer:backgroundLayer];
    [testView setWantsLayer:YES];
    
    
}

用意した画像は愛犬のかわいいお顔(^^;)

初めは画像をcontentにしたLayerを直接ViewにsetLayer:したら、Layer.frameで指定したサイズが全く無視されてView全域に張り付く感じで表示された。
木下氏のコードどおり背景Layerを1枚はさんだら、frameの大きさが反映された。なるほど。

CALayerは超軽量subViewみたいなもの、というふうに今のところ考えておこう。
久しぶりにXcode触ってなんだかうれしい。

0 件のコメント:

コメントを投稿