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