2012-03-13 6 views
0

Im пытается выяснить, почему мое масштабирование действует очень странно на моей OpenGL-камере. Его целью является увеличение и уменьшение масштаба, но его масштабирование очень случайное.Жест (зум) не правильно масштабируется

Heres мой код:

- (void)pinchDetected:(UIPinchGestureRecognizer *)pinchRecognizer 
{ 
    NSLog (@"%@", @"Pinching"); 

    if (pinchRecognizer.state == UIGestureRecognizerStateBegan || 
       pinchRecognizer.state == UIGestureRecognizerStateChanged || 
       pinchRecognizer.state == UIGestureRecognizerStateEnded) { 
     currentScale = pinchRecognizer.scale; 
    } 

    if(lastScale < currentScale) { 
     _camera.z += currentScale * 0.01f; 
     lastScale = currentScale; 
    } 

    if (lastScale > currentScale) 
    { 
     _camera.z -= currentScale * 0.01f; 
     lastScale = currentScale; 
    } 

} 
+0

Он изменяет время от времени, поэтому он в основном не масштабируется с непрерывным коэффициентом. Если это имеет смысл? – JavaCake

ответ

1

Если у вас есть то, что является мультипликативным, и вы хотите сделать это добавка, вам нужно взять журнал:

- (void)pinchDetected:(UIPinchGestureRecognizer *)pinchRecognizer 
{ 
    if ((gesture.state == UIGestureRecognizerStateBegan) || 
     (gesture.state == UIGestureRecognizerStateChanged) || 
     (gesture.state == UIGestureRecognizerStateEnded)) { 
     _camera.z += log(gesture.scale); // you'll probably want to multiply this by some constant 
     gesture.scale = 1.0; 
    } 
} 
+0

Не могли бы вы привести более полный пример? Потому что это работает неправильно. – JavaCake

+0

Это полный пример. Как я уже сказал в своем комментарии, единственное, что вам нужно сделать, это умножить журнал на константу, например. '_camera.z + = someConstant * log (gesture.scale);' где someConstant - некоторое число. – yuji

+0

Я понимаю это ясно, но когда зажимание и выключение происходит не так гладко, и он не всегда реагирует на перевернутое защемление. Что-то не так с состоянием жестов? – JavaCake

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