Accumulated transformation

Hello. I’am developing control for visualising raster maps (google maps, mapbox etc) on iOS platform. Only raster tiles. All ok, but I have one problem: user can touch any point on screen (this is anchor point for rotation and scale). But does not work. Now I have modelView matrix, and every frame i updating this matrix with deltas (delta scale, delta rotation, delta translation). All work fine, but i can’t control animation of camera (I can only reset matrix and translate). When I trying control transform (without deltas), and every frame reset, translate, rotate, scale - all just twitches. And I have one question: How I can control transform (cumulate) with anchor point? Every frame now i do (based on gestures):

  • (void)tick {
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrthof(0, screenBounds.size.width, screenBounds.size.height, 0, -1, 1);

    glMatrixMode(GL_MODELVIEW);
    glLoadMatrixf(modelView.m);

    GLKMatrix4 invModelView = GLKMatrix4Invert(modelView, nil);
    GLKVector4 anchorInCC = GLKMatrix4MultiplyVector4(invModelView, GLKVector4Make(cameraAnchor.x, cameraAnchor.y, 0, 1));

    glTranslatef(mCurrentTranslation.x, mCurrentTranslation.y, 0);
    mCurrentTranslation = GLKVector2Make(0, 0);
    glTranslatef(anchorInCC.x, anchorInCC.y, 0);

    if (mCurrentScale != 0) {
    mAccumulatedScale += mCurrentScale;
    mCurrentScale = 0.0;

      glGetFloatv(GL_MODELVIEW_MATRIX, modelView.m);
      modelView = GLKMatrix4Scale(modelView, mAccumulatedScale, mAccumulatedScale, 1);
      mAccumulatedScale = 1.0;
      glLoadMatrixf(modelView.m);
    

    }

    glRotatef(mCurrentRotation * 180.0 / M_PI, 0, 0, 1);
    mCurrentRotation = 0.0;

    glTranslatef(-anchorInCC.x, -anchorInCC.y, 0);

    glGetFloatv(GL_MODELVIEW_MATRIX, modelView.m);

// Render geometry

}