Как я могу заставить OpenFlow работать правильно в iOS 5.0? - PullRequest
2 голосов
/ 07 октября 2011

Я недавно обновил свое приложение для использования iOS 5.0 SDK.В нем я использую реализацию потока покрытия OpenFlow Алекса Фаёвского.

Я обнаружил, что когда я запускаю приложение на iOS 5.0, OpenFlow делает неправильное преобразование или Z-перемещение, когда я пролистываю изображения.

Что я могу сделать, чтобы OpenFlow корректно работал на iOS 5.0 SDK?

Ответы [ 2 ]

7 голосов
/ 17 октября 2011

Я сделал улучшение по сравнению с тем, что у вас здесь, и оно, безусловно, заставляет его работать гладко (как это было в 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: анимированный, поместите следующий код:

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.

Best,

2 голосов
/ 10 октября 2011

Сегодня я наконец-то нашел решение этой проблемы. По-видимому, в 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);

Надеюсь, это поможет вам, ребята, так же, как и мне.

...