Where does the 200 come from?  That seems like a magic number that you shouldn't have here.

In gesture_detector, I use the initial distance between the two touches as the base distance, an then compute the zoom factor depending on how much the distance between the two touches changes.  I'm guessing here that you're hardcoding a 200px initial distance?