facebookarchive / pop

An extensible iOS and OS X animation library, useful for physics-based interactions.
Other
19.66k stars 2.88k forks source link

Pop Animation Bug - Locks Up Animation - Intermittent Working Behavior #47

Open PaulSolt opened 10 years ago

PaulSolt commented 10 years ago

I have a bug with Pop animations and Cocos2d.

The Pop animations stop working for me intermittently. I'm using them to create snapping behavior for my game user interface in Bomb Dodge

Sometimes on start and sometimes on screen transitions or screen rotations the POP animations will stop working altogether. They don't always become functional until I restart the app, rotate it, or pull up the Control Center.

The animations are failing to fire in some cases, but I can't consistently reproduce the bug. It seems to be correlated to having the Cocos2D game engine running at 60 FPS in the background, but it works half of the time.

I've uploaded a test project to try and highlight the issue that you can download here. https://github.com/PaulSolt/PopAnimationBug

The buttons don't always slide to their final destination. This causes them to sit funny on-screen, or in Bomb Dodge, not even appear on screen after a transition. There is a pan gesture attached to the buttons that should snap the button back to it's original center, but that fails when Pop locks up.a

pop animation stopped snap after pan gesture does not work

kimon commented 10 years ago

Thanks for providing a sample app. So far I haven't been able to reproduce. Any additional hints or repro steps I can try? Is this perhaps device or simulator only?

PaulSolt commented 10 years ago

Device only

Sent from my iPad

On May 2, 2014, at 5:35 PM, Kimon Tsinteris notifications@github.com wrote:

Thanks for providing a sample app. So far I haven't been able to reproduce. Any additional hints or repro steps I can try? Is this perhaps device or simulator only?

— Reply to this email directly or view it on GitHub.

PaulSolt commented 10 years ago

It's a challenge to reproduce in this tutorial, but I've been able to do it more on my iPad Air 64gb than my iPhone 5S.

It happens more regularly in the actually game on Start. You have to force quit the game to have the startup logic happen. I'm not sure if its from all the asset loading on the main thread. Your video on performance made it sound like the physics wouldn't happen if there was any work on the main thread.

kimon commented 10 years ago

Interesting. No luck on an iPhone 5S yet. Some ideas to help debug:

Let me know if you uncover anything interesting. I'll also try to reproduce on an iPad Air when I get a chance.

kimon commented 10 years ago

So far I haven't been able to reproduce this issue. Did additional debugging uncover anything interesting?

liamnichols commented 10 years ago

I am also able to produce a similar issue on my own sample project when scaling and rotating a view using gesture recognisers however is is very hard to reproduce. Will upload the project when i get a chance and try to debug further

liamnichols commented 10 years ago

Here is my sample project: https://github.com/liamnichols/SmoothInteraction

I could replicate the bug by running it on a 64-Bit iPhone (haven't tried with 32-Bit devices), selecting "method 1" and expanding the image on the screen using a pinch and rotating it at the same time so my fingers almost go off the screen.

I'll try and get a video if i can or better steps

PaulSolt commented 10 years ago

I can reproduce it with Liam's code sample. The image will get stuck on the outer bounds and the physics simulation stops working. It just sits there.

The same type of thing happens with my code sample. It's hard to reproduce it in my sample, but it is possible on an iPhone 5S or iPad Air.

In my game Bomb Dodge it's very easy to repro, I could send a build via test flight. The buttons get stuck and either stop snapping back to their original location, or they never appear onscreen.

Here's some output from Bomb Dodge. Watch the video (~15 seconds in for bug) to see how it behaves. For the first three animations, the buttons did not snap back. You can see theirs something strange with the output. On the last iteration it snapped back, and there are a bunch of data points.

Bug Video: http://youtu.be/qhqaDudK_JE

-Paul

2014-05-23 17:56:21.645 Bombs[11307:60b] events:(

"<POPAnimationEvent:0.000000; type = didStart; animation =

<POPSpringAnimation:0x15e244b0; from = null; to = (284.000, 102.000)>>",

"<POPAnimationEvent:0.000000; type = didStop; animation =

<POPSpringAnimation:0x15e244b0; from = null; to = (284.000, 102.000)>; value = 0>"

)

2014-05-23 17:56:22.870 Bombs[11307:60b] _NEW GAME STAGE_

2014-05-23 17:56:22.871 Bombs[11307:60b] New Stage Name:Fireball Cross Stage Hard

2014-05-23 17:56:22.872 Bombs[11307:60b] Interval length:6.253057

2014-05-23 17:56:26.642 Bombs[11307:60b] events:(

"<POPAnimationEvent:0.000000; type = didStart; animation =

<POPSpringAnimation:0x15d4a550; from = null; to = (284.000, 102.000)>>",

"<POPAnimationEvent:0.000000; type = didStop; animation =

<POPSpringAnimation:0x15d4a550; from = null; to = (284.000, 102.000)>; value = 0>"

)

2014-05-23 17:56:29.140 Bombs[11307:60b] _NEW GAME STAGE_

2014-05-23 17:56:29.142 Bombs[11307:60b] New Stage Name:Medium Teeth Wall Stage

2014-05-23 17:56:29.143 Bombs[11307:60b] Interval length:7.541579

2014-05-23 17:56:30.875 Bombs[11307:60b] events:(

"<POPAnimationEvent:0.000000; type = didStart; animation =

<POPSpringAnimation:0x15e021c0; from = null; to = (284.000, 102.000)>>",

"<POPAnimationEvent:0.000000; type = didStop; animation =

<POPSpringAnimation:0x15e021c0; from = null; to = (284.000, 102.000)>; value = 0>"

)

2014-05-23 17:56:32.163 Bombs[11307:60b] events:(

"<POPAnimationEvent:0.000000; type = read; value = NSPoint: {188.54094,

252.19989}>",

"<POPAnimationEvent:0.000000; type = didStart; animation =

<POPSpringAnimation:0x15e20cd0; from = (188.541, 252.200); to = (284.000, 102.000); currentValue = (188.541, 252.200); progress = 0.000000>>",

"<POPAnimationEvent:0.016667; type = write; value = NSPoint:

{190.41809, 249.24629}; velocity = NSPoint: {231.47711, -364.21725}>",

"<POPAnimationEvent:0.029604; type = write; value = NSPoint:

{194.32439, 243.09995}; velocity = NSPoint: {382.99948, -602.62982}>",

"<POPAnimationEvent:0.051168; type = write; value = NSPoint:

{204.55275, 227.00616}; velocity = NSPoint: {569.4375, -895.98047}>",

"<POPAnimationEvent:0.060519; type = write; value = NSPoint:

{209.63521, 219.00917}; velocity = NSPoint: {621.54077, -977.96234}>",

"<POPAnimationEvent:0.080596; type = write; value = NSPoint:

{222.64357, 198.54118}; velocity = NSPoint: {695.95978, -1095.0569}>",

"<POPAnimationEvent:0.094992; type = write; value = NSPoint:

{232.54143, 182.96742}; velocity = NSPoint: {714.35315, -1123.9979}>",

"<POPAnimationEvent:0.112785; type = write; value = NSPoint:

{245.19456, 163.05836}; velocity = NSPoint: {702.52942, -1105.3939}>",

"<POPAnimationEvent:0.128214; type = write; value = NSPoint:

{255.63734, 146.6272}; velocity = NSPoint: {666.83466, -1049.2301}>",

"<POPAnimationEvent:0.146986; type = write; value = NSPoint:

{267.07608, 128.62892}; velocity = NSPoint: {601.56128, -946.52582}>",

"<POPAnimationEvent:0.162118; type = write; value = NSPoint:

{275.66397, 115.11633}; velocity = NSPoint: {532.95544, -838.578}>",

"<POPAnimationEvent:0.179863; type = write; value = NSPoint:

{283.93906, 102.09593}; velocity = NSPoint: {447.39972, -703.96051}>",

"<POPAnimationEvent:0.179863; type = didReachToValue; value = NSPoint:

{290.26639, 92.140213}; velocity = NSPoint: {364.46341, -573.4646}>",

"<POPAnimationEvent:0.195584; type = write; value = NSPoint:

{290.26639, 92.140213}; velocity = NSPoint: {364.46341, -573.4646}>",

"<POPAnimationEvent:0.213131; type = write; value = NSPoint:

{295.72772, 83.547104}; velocity = NSPoint: {273.5676, -430.44482}>",

"<POPAnimationEvent:0.232276; type = write; value = NSPoint:

{299.87363, 77.023727}; velocity = NSPoint: {181.33446, -285.32086}>",

"<POPAnimationEvent:0.246729; type = write; value = NSPoint:

{301.91843, 73.806328}; velocity = NSPoint: {117.5292, -184.92664}>",

"<POPAnimationEvent:0.261069; type = write; value = NSPoint:

{303.14792, 71.871788}; velocity = NSPoint: {58.403767, -91.895836}>",

"<POPAnimationEvent:0.281579; type = write; value = NSPoint:

{303.58002, 71.191917}; velocity = NSPoint: {-11.765814, 18.512352}>",

"<POPAnimationEvent:0.295579; type = write; value = NSPoint:

{303.14124, 71.882301}; velocity = NSPoint: {-51.579876, 81.157677}>",

"<POPAnimationEvent:0.313310; type = write; value = NSPoint:

{301.88409, 73.860344}; velocity = NSPoint: {-91.662903, 144.22624}>",

"<POPAnimationEvent:0.327569; type = write; value = NSPoint:

{300.47433, 76.078529}; velocity = NSPoint: {-114.93307, 180.84065}>",

"<POPAnimationEvent:0.346913; type = write; value = NSPoint:

{298.07974, 79.846291}; velocity = NSPoint: {-136.20261, 214.30717}>",

"<POPAnimationEvent:0.360998; type = write; value = NSPoint:

{296.10913, 82.946953}; velocity = NSPoint: {-144.34186, 227.11388}>",

"<POPAnimationEvent:0.379620; type = write; value = NSPoint:

{293.38718, 87.229813}; velocity = NSPoint: {-146.50545, 230.51817}>",

"<POPAnimationEvent:0.394884; type = write; value = NSPoint:

{291.23236, 90.620308}; velocity = NSPoint: {-142.26601, 223.84761}>",

"<POPAnimationEvent:0.412282; type = write; value = NSPoint:

{288.85455, 94.361664}; velocity = NSPoint: {-132.09108, 207.83786}>",

"<POPAnimationEvent:0.428320; type = write; value = NSPoint:

{286.92383, 97.399529}; velocity = NSPoint: {-119.51676, 188.05281}>",

"<POPAnimationEvent:0.448195; type = write; value = NSPoint: {284.8067,

100.73071}; velocity = NSPoint: {-100.63652, 158.34581}>",

"<POPAnimationEvent:0.462274; type = write; value = NSPoint:

{283.56464, 102.68501}; velocity = NSPoint: {-86.417442, 135.9729}>",

"<POPAnimationEvent:0.479110; type = write; value = NSPoint:

{282.31476, 104.65163}; velocity = NSPoint: {-68.741516, 108.16088}>",

"<POPAnimationEvent:0.495399; type = write; value = NSPoint:

{281.38516, 106.11428}; velocity = NSPoint: {-52.104397, 81.98333}>",

"<POPAnimationEvent:0.512765; type = write; value = NSPoint:

{280.65729, 107.25954}; velocity = NSPoint: {-34.954357, 54.998756}>",

"<POPAnimationEvent:0.528520; type = write; value = NSPoint: {280.2294,

107.9328}; velocity = NSPoint: {-20.452023, 32.180222}>",

"<POPAnimationEvent:0.546244; type = write; value = NSPoint:

{280.00211, 108.29046}; velocity = NSPoint: {-6.2873607, 9.8929672}>",

"<POPAnimationEvent:0.560676; type = write; value = NSPoint:

{279.98352, 108.31969}; velocity = NSPoint: {3.3098881, -5.2077832}>",

"<POPAnimationEvent:0.580750; type = write; value = NSPoint:

{280.16452, 108.03492}; velocity = NSPoint: {14.477864, -22.779945}>",

"<POPAnimationEvent:0.595435; type = write; value = NSPoint:

{280.41998, 107.63299}; velocity = NSPoint: {20.627598, -32.456249}>",

"<POPAnimationEvent:0.617078; type = write; value = NSPoint:

{280.92465, 106.83893}; velocity = NSPoint: {26.703754, -42.016872}>",

"<POPAnimationEvent:0.631277; type = write; value = NSPoint: {281.2951,

106.25603}; velocity = NSPoint: {28.902443, -45.476467}>",

"<POPAnimationEvent:0.650472; type = write; value = NSPoint:

{281.84335, 105.39338}; velocity = NSPoint: {30.125483, -47.400906}>",

"<POPAnimationEvent:0.661671; type = write; value = NSPoint:

{282.16458, 104.88795}; velocity = NSPoint: {29.983582, -47.177643}>",

"<POPAnimationEvent:0.680426; type = write; value = NSPoint:

{282.70581, 104.03634}; velocity = NSPoint: {28.533775, -44.896492}>",

"<POPAnimationEvent:0.695891; type = write; value = NSPoint:

{283.11618, 103.39064}; velocity = NSPoint: {26.470129, -41.649437}>",

"<POPAnimationEvent:0.712888; type = write; value = NSPoint:

{283.53842, 102.72628}; velocity = NSPoint: {23.432505, -36.869869}>",

"<POPAnimationEvent:0.728514; type = write; value = NSPoint:

{283.87735, 102.19301}; velocity = NSPoint: {20.209942, -31.799353}>",

"<POPAnimationEvent:0.746674; type = write; value = NSPoint:

{284.20001, 101.6853}; velocity = NSPoint: {16.281799, -25.618679}>",

"<POPAnimationEvent:0.763041; type = write; value = NSPoint:

{284.43219, 101.31998}; velocity = NSPoint: {12.673493, -19.941185}>",

"<POPAnimationEvent:0.780226; type = write; value = NSPoint:

{284.60889, 101.04193}; velocity = NSPoint: {9.1410313, -14.383033}>",

"<POPAnimationEvent:0.796105; type = write; value = NSPoint:

{284.72342, 100.86172}; velocity = NSPoint: {6.0669994, -9.5461464}>",

"<POPAnimationEvent:0.813327; type = write; value = NSPoint:

{284.79745, 100.74523}; velocity = NSPoint: {3.0661263, -4.8243699}>",

"<POPAnimationEvent:0.828107; type = write; value = NSPoint:

{284.82428, 100.703}; velocity = NSPoint: {0.79175395, -1.2457343}>",

"<POPAnimationEvent:0.848404; type = write; value = NSPoint:

{284.81342, 100.72012}; velocity = NSPoint: {-1.8060724, 2.8419034}>",

"<POPAnimationEvent:0.863880; type = write; value = NSPoint:

{284.77444, 100.78143}; velocity = NSPoint: {-3.3690934, 5.3012505}>",

"<POPAnimationEvent:0.881389; type = write; value = NSPoint:

{284.70331, 100.89339}; velocity = NSPoint: {-4.7312841, 7.4446034}>",

"<POPAnimationEvent:0.895220; type = write; value = NSPoint:

{284.63571, 100.99973}; velocity = NSPoint: {-5.4490261, 8.5738945}>",

"<POPAnimationEvent:0.914602; type = write; value = NSPoint:

{284.52817, 101.16895}; velocity = NSPoint: {-6.0350018, 9.4958887}>",

"<POPAnimationEvent:0.928731; type = write; value = NSPoint: {284.444,

101.30136}; velocity = NSPoint: {-6.1851306, 9.7321091}>",

"<POPAnimationEvent:0.946627; type = write; value = NSPoint:

{284.33545, 101.47217}; velocity = NSPoint: {-6.0807905, 9.5679827}>",

"<POPAnimationEvent:0.961422; type = write; value = NSPoint:

{284.24963, 101.60718}; velocity = NSPoint: {-5.791162, 9.1122828}>",

"<POPAnimationEvent:0.982813; type = write; value = NSPoint:

{284.13556, 101.78667}; velocity = NSPoint: {-5.1300597, 8.0721388}>",

"<POPAnimationEvent:0.995497; type = write; value = NSPoint:

{284.07449, 101.88277}; velocity = NSPoint: {-4.6348529, 7.2929931}>",

"<POPAnimationEvent:0.995497; type = write; value = NSPoint: {284,

102}; velocity = NSPoint: {-4.6348529, 7.2929931}>",

"<POPAnimationEvent:0.995497; type = didStop; animation =

<POPSpringAnimation:0x15e20cd0; from = (188.541, 252.200); to = (284.000, 102.000); velocity = (-4.635, 7.293)>; value = 1; velocity = NSPoint: {-4.6348529, 7.2929931}>"

On Mon, May 19, 2014 at 8:26 AM, Liam Nichols notifications@github.comwrote:

Here is my sample project: https://github.com/liamnichols/SmoothInteraction

I could replicate the bug by running it on a 64-Bit iPhone (haven't tried with 32-Bit devices), selecting "method 1" and expanding the image on the screen using a pinch and rotating it at the same time so my fingers almost go off the screen.

I'll try and get a video if i can or better steps

— Reply to this email directly or view it on GitHubhttps://github.com/facebook/pop/issues/47#issuecomment-43495231 .

ghost commented 9 years ago

Thank you for reporting this issue and appreciate your patience. We've notified the core team for an update on this issue. We're looking for a response within the next 30 days or the issue may be closed.