2

我最近更新了我的应用程序以使用 iOS 5.0 SDK。在其中,我使用了Alex Fajowski 的 OpenFlow覆盖流实现。

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

我可以做些什么来使 OpenFlow 在 iOS 5.0 SDK 上正常工作吗?

4

2 回答 2

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

在 -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 回答