I created an SKSpriteNode as the only node in my scene. It shows a small 120 x 75 pixels turtle dancing.
The turtle has 100 dance frames. I can step through the frames in Finder and see perfect smooth motion.
Now I did ridiculous simple test in Sprite Kit. All frames on texture atlas. At app launch I generate SKTextureAtlas object, then preload all SKTexture objects into sequence array. On every frame I call -next on the turtle node. It then simply grabs next SKTexture from the array and sets it as current texture.
The animation is not smooth. iPhone 5S says 60 fps. But I see random frame drops happen.
I tried compression with PVR. Then I tried without atlas. Also tried calling the preload method of SKTextureAtlas. Still not smooth. It just won't display all texture frames with same frame duration for a smooth look.
Then I did even simpler test. A progress bar which moves one pixel at a time and 100 textures. Still not smooth. Nothing else is going on in my app and it is an iPhone 5S.
Even simpler test:
SKAction *a = [SKAction moveByX:0 y:-300 duration:30];
[self runAction:a];
From time to time you will notice a jump or hickup. Even with this very simple animation. There is no NSLog or console writing going on either. Same when disconnected device from Mac.
Is this a Sprite Kit limitation that you should not use very large animation sequences because Sprite Kit frame render time varies a lot even at 60 fps?