Core Animation - 画面手前からフェードイン / 手前へフェードアウト [MacOSX版]

2010年11月5日金曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

[前回まで] Cocoaの日々: Core Animation - 画面手前からフェードイン / 手前へフェードアウト [2]手直し

SimpleCapに組み込むにあたって気になる部分が出てきたので、やっぱりサンプルを Mac OS X 向けに作り直した。


違い


iPhone版と MacOSX版はどちらも基本的に同等のコードで動作するのだが以下の2点が違った。

UIView と NSView の違い

UIView は必ず CALayer を持っていて変更ができない(layerプロパティは readonly)。また setWantsLayer: は不要(そもそもメソッドが無い)。一方、NSView の場合は layer は自前で用意して設定するのが基本で差し替えも可能。またレイヤーを(明示的に)使う場合は setWantsLayer:YES が必要。

zPositionの適用

iOS の場合、9つのレイヤーを載せたベースのレイヤーに対して zPositionの変更を行うアニメーションを行うことができた。
- (void)animateFadeInOut:(BOOL)flag
{
  :
 CABasicAnimation *animation;
 animation=[CABasicAnimation animationWithKeyPath:@"zPosition"];
  :
 [baseLayer addAnimation:animation forKey:@"zPosition"];
}

Mac OS X の場合、これは駄目で9つのレイヤー一つ一つにアニメーションを設定擦る必要があった。
- (void)animateFadeInOut:(BOOL)flag
{
  :
 for (CALayer* layer in self.view.layer.sublayers) {
  CABasicAnimation *animation;
  animation=[CABasicAnimation animationWithKeyPath:@"zPosition"];
  :
  [layer addAnimation:animation forKey:@"zPosition"];
 }
}
やり方がまずいのかもしれない。opacity は問題なかった。



サンプル実行

実行すると手間から画像が徐々に出てくる。


最後は原寸大で終了

ボタンを押すと今度は逆に拡大しながら手前へフェードアウトする。後はその繰り返し。


ソースコード


GitHubからどうぞ。

CoreAnimation3DSample4MacOSX at 2010-11-05 from xcatsan's MacOSX-Sample-Code - GitHub


- - - -
Mac OS X と iPhone の違いは、他には Core Image の有無がある。将来デバイスの能力が上がってくると搭載される可能性はある。

Responses

Leave a Response

人気の投稿(過去 30日間)