我最近更新了我的应用程序以使用 iOS 5.0 SDK。在其中,我使用了Alex Fajowski 的 OpenFlow覆盖流实现。
我发现当我在 iOS 5.0 上运行应用程序时,当我滑动图像时,OpenFlow 进行了不正确的转换或 Z 重新定位。
我可以做些什么来使 OpenFlow 在 iOS 5.0 SDK 上正常工作吗?
我最近更新了我的应用程序以使用 iOS 5.0 SDK。在其中,我使用了Alex Fajowski 的 OpenFlow覆盖流实现。
我发现当我在 iOS 5.0 上运行应用程序时,当我滑动图像时,OpenFlow 进行了不正确的转换或 Z 重新定位。
我可以做些什么来使 OpenFlow 在 iOS 5.0 SDK 上正常工作吗?
我对您在此处所拥有的进行了改进,并且它确实使其工作顺利(就像它过去在 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 上运行有条件地启用其中一个。
最好的,
今天,我终于找到了解决这个问题的方法。显然,在 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);
希望它可以帮助你们,因为它确实帮助了我。