如何在iOS 5.0中使OpenFlow正常工作?

时间:2011-10-07 11:17:19

标签: ios core-animation ios5 coverflow

我最近更新了我的应用程序以使用iOS 5.0 SDK。在其中,我正在使用Alex Fajowski's OpenFlow封面流程实现。

我发现当我在iOS 5.0上运行应用程序时,当我浏览图像时,OpenFlow正在进行不正确的转换或Z重新定位。

我能做些什么来让OpenFlow在iOS 5.0 SDK上正常工作吗?

2 个答案:

答案 0 :(得分:7)

我对你所拥有的东西进行了改进,它确实使它顺利运行(以前的方式在iOS 4中)。

在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);

Inside -layoutCover:selectedCover:animated,放置以下代码:

CGFloat newZPosition = SIDE_COVER_ZPOSITION / 2.0;

...

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上运行。

最佳,

答案 1 :(得分: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);

希望它可以帮助你们,因为它确实帮助了我。