最近、iOS5.0SDKを使用するようにアプリケーションを更新しました。その中で、私はAlexFajowskiのOpenFlowカバーフロー実装を使用しています。
iOS 5.0でアプリケーションを実行すると、画像をスワイプしたときにOpenFlowが誤った変換またはZ再配置を行っていることがわかりました。
iOS 5.0 SDKでOpenFlowを正しく動作させるためにできることはありますか?
最近、iOS5.0SDKを使用するようにアプリケーションを更新しました。その中で、私はAlexFajowskiのOpenFlowカバーフロー実装を使用しています。
iOS 5.0でアプリケーションを実行すると、画像をスワイプしたときにOpenFlowが誤った変換またはZ再配置を行っていることがわかりました。
iOS 5.0 SDKでOpenFlowを正しく動作させるためにできることはありますか?
私はあなたがここに持っているものを改善しました、そしてそれは確かにそれをスムーズに動作させます(それがiOS4であったように)。
AfOpenFlowView.mで、上記で述べたものの代わりに(-setUpInitialStateで):
leftTransform = CATransform3DTranslate(CATransform3DIdentity, 0, 0, SIDE_COVER_ZPOSITION / 2.0);
leftTransform = CATransform3DRotate(leftTransform, SIDE_COVER_ANGLE, 0.0f, 1.0f, 0.0f);
rightTransform = CATransform3DTranslate(CATransform3DIdentity, 0, 0, SIDE_COVER_ZPOSITION / 2.0);
rightTransform = CATransform3DRotate(rightTransform, SIDE_COVER_ANGLE, 0.0f, -1.0f, 0.0f);
-layoutCover:selectedCover:animated内に、次のコードを配置します。
CGFloat newZPosition = SIDE_COVER_ZPOSITION / 2.0;
…</p>
CABasicAnimation *zPositionAnimation = [CABasicAnimation animationWithKeyPath:@"zPosition"];
[zPositionAnimation setToValue:[NSNumber numberWithFloat:newZPosition]];
[zPositionAnimation setDuration:(animated ? .3 : 0.0)];
[zPositionAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[zPositionAnimation setRemovedOnCompletion:NO];
[zPositionAnimation setFillMode:kCAFillModeForwards];
今、する代わりに:
aCover.layer.zPosition = newZPosition;
次のように置き換えます。
[aCover.layer addAnimation:zPositionAnimation forKey:nil];
iOS 4または5のどちらで実行されているかに応じて、条件付きで有効にすることができます。
一番、
今日、私はついにこの問題の解決策を見つけました。どうやら、iOS 5では、zPositionはもうアニメーション化されていません(残念ながら、ドキュメントにそう書かれているからです)。これが、CATransform3Dに正しい遷移を含めることで、このバグが修正される可能性がある理由です。
ついさっき:
leftTransform = CATransform3DIdentity;
leftTransform = CATransform3DRotate(leftTransform, SIDE_COVER_ANGLE, 0.0f, 1.0f, 0.0f);
rightTransform = CATransform3DIdentity;
rightTransform = CATransform3DRotate(rightTransform, SIDE_COVER_ANGLE, 0.0f, -1.0f, 0.0f);
これで、次のようになります。
leftTransform = CATransform3DTranslate(CATransform3DIdentity, 0, 0, SIDE_COVER_ZPOSITION);
leftTransform = CATransform3DRotate(leftTransform, SIDE_COVER_ANGLE, 0.0f, 1.0f, 0.0f);
rightTransform = CATransform3DTranslate(CATransform3DIdentity, 0, 0, SIDE_COVER_ZPOSITION);
rightTransform = CATransform3DRotate(rightTransform, SIDE_COVER_ANGLE, 0.0f, -1.0f, 0.0f);
それが私を助けたように、それがあなたたちを助けることを願っています。