2011-10-07 4 views
2

Недавно я обновил приложение, чтобы использовать iOS 5.0 SDK. Внутри этого я использую реализацию потокового потока Alex Fajowski's OpenFlow.Как я могу правильно работать OpenFlow в iOS 5.0?

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

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

+0

Пожалуйста, разместить изображение грубого transfomation :) – jrturton

+0

Да, я также сталкиваюсь с той же проблемой, это похоже на отражение изображения в 3D-эффекте. Предоставьте некоторое решение, если у кого есть. –

+0

Я не могу сделать снимок экрана, потому что грубость происходит при салфетке, и это очень быстро. –

ответ

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

Надеется, что это помогает вам, ребятам, как это было мне помочь.

+0

Ницца, спасибо! Вы должны обязательно отправить исправление по github и закрыть проблему (https://github.com/thefaj/OpenFlow/issues/21), я думаю, что это был кто-то, кто ее разместил? – boliva

+0

Хорошо, это определенно обеспечивает улучшение, но анимация по-прежнему не так гладко, как раньше ... – boliva

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: анимированные, поместите следующий код:

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

можно условно включить либо в зависимости от того, он работает на прошивке 4 или 5.

Best,

+0

Вы пробовали мое решение? Это сработало? –

+0

Да, он работал, но по-прежнему не хватало некоторой «гладкости» анимации, которую я исправил, добавив то, что я только что разместил (что, конечно, основано на том, что вы изначально прокомментировали). – boliva

 Смежные вопросы

  • Нет связанных вопросов^_^