2

最近、iOS5.0SDKを使用するようにアプリケーションを更新しました。その中で、私はAlexFajowskiのOpenFlowカバーフロー実装を使用しています。

iOS 5.0でアプリケーションを実行すると、画像をスワイプしたときにOpenFlowが誤った変換またはZ再配置を行っていることがわかりました。

iOS 5.0 SDKでOpenFlowを正しく動作させるためにできることはありますか?

4

2 に答える 2

7

私はあなたがここに持っているものを改善しました、そしてそれは確かにそれをスムーズに動作させます(それが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のどちらで実行されているかに応じて、条件付きで有効にすることができます。

一番、

于 2011-10-17T00:53:44.663 に答える
2

今日、私はついにこの問題の解決策を見つけました。どうやら、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);

それが私を助けたように、それがあなたたちを助けることを願っています。

于 2011-10-10T13:20:53.240 に答える