Twitter for iPadは、派手な「紙の折り目を広げるためのピンチ」効果を実装しています。ここに短いビデオクリップ。 http://www.youtube.com/watch?v=B0TuPsNJ-XY
これは、OpenGLなしでCATransform3D
を使用して実行できますか?実用的な例はありがたいです。
更新:このアニメーション効果へのアプローチまたは実装に興味がありました。だから私はこの質問に賞金を提供しました-srikar
これは、ジェスチャレコグナイザーとCATransform3D
を使用して開始する非常に簡単な例です。ピンチするだけで灰色のビューが回転します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ...
CGRect rect = self.window.bounds;
view = [[UIView alloc] initWithFrame:CGRectMake(rect.size.width/4, rect.size.height/4,
rect.size.width/2, rect.size.height/2)];
view.backgroundColor = [UIColor lightGrayColor];
[self.window addSubview:view];
CATransform3D transform = CATransform3DIdentity;
transform.m34 = -1/500.0; // this allows perspective
self.window.layer.sublayerTransform = transform;
UIPinchGestureRecognizer *rec = [[UIPinchGestureRecognizer alloc] initWithTarget:self
action:@selector(pinch:)];
[self.window addGestureRecognizer:rec];
[rec release];
return YES;
}
- (void)pinch:(UIPinchGestureRecognizer *)rec
{
CATransform3D t = CATransform3DIdentity;
t = CATransform3DTranslate(t, 0, -self.view.bounds.size.height/2, 0);
t = CATransform3DRotate(t, rec.scale * M_PI, 1, 0, 0);
t = CATransform3DTranslate(t, 0, -self.view.bounds.size.height/2, 0);
self.view.layer.transform = t;
}
基本的に、この効果はいくつかの異なるステップで構成されています。
CATransform3D
を使用して 遠近法を追加 画像に追加します。ビューを折りたたむには、上記の逆を実行します。
*これらのビューは比較的単純であるため、グラフィックスコンテキストにレンダリングする必要がない場合があります。
効果は基本的にX軸を中心に回転するビューです。リストからツイートをドラッグすると、X-Z平面に平行に始まるビューが表示されます。ユーザーがピンチを解除すると、ビューはX-Y平面に完全に入るまでX軸を中心に回転します。 ドキュメント は言う:
CATransform3Dデータ構造は、回転、スケーリング、オフセット、スキュー、およびレイヤーへの遠近法変換の適用に使用される同種の3次元変換(CGFloat値の4 x 4マトリックス)を定義します。
さらに、CALayerのtransform
プロパティはCATransform3D構造であり、アニメーション化も可能であることがわかっています。エルゴ、問題の折りたたみ効果はCoreAnimationで実行可能であると言っても過言ではありません。