计算凸起失真滤波器半径的夹点值

时间:2015-02-28 15:45:23

标签: ios gpuimage uipinchgesturerecognizer

我需要根据捏合增加和减少GPUImagePinchDistortionFilter半径,我使用捏手势识别器并存储手势识别器的起始比例。我需要计算-2.0和2.0之间的夹点比例。这是我的代码。

if([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
    lastScale = [gestureRecognizer scale];
}

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan ||
    [gestureRecognizer state] == UIGestureRecognizerStateChanged) {

    CGFloat currentScale = [[[gestureRecognizer view].layer valueForKeyPath:@"transform.scale"] floatValue];

    CGFloat kMaxScale = 2.0;
    CGFloat kMinScale = -2.0;

    CGFloat newScale = 1.0 - (lastScale - [gestureRecognizer scale]);

    newScale = MIN(newScale, kMaxScale / currentScale);
    newScale = MAX(newScale, kMinScale / currentScale);

    [pinchDistortionFilter setRadius:newScale];
}

我已经关注了一些帖子。但仍然卡住了,每次用户捏时我都要设置这个但是半径必须在最小值和最大值之内。实际上我很困惑如何实现这一点,任何人都可以帮助我吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为你应该尝试将lastScale和radius保存在正确的位置,并且半径应该是> 0请参阅下面的答案,我的实施可能对您有所帮助。

float currentApplicableScale = (gestureRecognizer.scale/2);

   if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
       lastRadius = lastScale;
   }else if (gestureRecognizer.state==UIGestureRecognizerStateBegan) {
       firstScale = currentApplicableScale;
   }else if (gestureRecognizer.state == UIGestureRecognizerStateChanged) {
       float radius = currentApplicableScale;

       if (lastRadius<=0) {
           lastRadius = 0.25;
       }

       radius = radius - (firstScale - lastRadius);

       if (radius>0 && radius < 0.5) {

            [(GPUImagePinchDistortionFilter*)pinchFilter setRadius:radius];


           lastScale = radius; //Save here
       }
   }