Ios 如何降低收缩变焦图像识别器的速度

Ios 如何降低收缩变焦图像识别器的速度,ios,objective-c,uipinchgesturerecognizer,Ios,Objective C,Uipinchgesturerecognizer,我创建了一个UIgestureRecognitor,很像: 这就像预期的一样,但是我的客户希望它对触摸不那么敏感。如何降低挤压的速度(向内和向外),使其以默认速度的80%左右缩放?您是否尝试将当前值缩放到80% if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {

我创建了一个
UIgestureRecognitor
,很像:


这就像预期的一样,但是我的客户希望它对触摸不那么敏感。如何降低挤压的速度(向内和向外),使其以默认速度的80%左右缩放?

您是否尝试将当前值缩放到80%

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

    CGFloat maxScale = 2.0;
    CGFloat currentScale = [gestureRecognizer scale];
    currentScale = 0.8 * currentScale;   //80% of scaling

    if(currentScale < 0.8)
        currentScale = 0.8;

    if(currentScale > maxScale)
        currentScale = maxScale;

    [gestureRecognizer view].transform = CGAffineTransformScale([[gestureRecognizer view] transform], currentScale, currentScale);

}
if([gestureRecognizer state]==UIGestureRecognizerState开始||
[gestureRecognizer状态]==UIGestureRecognizerStateChanged){
CGFloat maxScale=2.0;
CGFloat currentScale=[GestureRecognitor scale];
currentScale=0.8*currentScale;//缩放的80%
如果(电流标度<0.8)
电流标度=0.8;
如果(currentScale>maxScale)
currentScale=maxScale;
[GestureRecognitor视图].transform=CGAffineTransformScale([GestureRecognitor视图]transform],currentScale,currentScale);
}
试试这个

- (void)handlePinching:(UIPinchGestureRecognizer *)gestureRecognizer {

    if([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
        if (CGRectIsEmpty(self.initalFrame)) {
            self.initalFrame = gestureRecognizer.view.frame;
            // store view's original frame and never change it
        }

        if (self.preScale == 0.f) {
            self.preScale = 1.f; 
        }

        gestureRecognizer.scale = self.preScale;
        // gestureRecognizer and view should share the same scale state at the beginning
    }

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

        const CGFloat kMaxScale = 2.0;
        const CGFloat kMinScale = 1.0;

        CGFloat newScale = gestureRecognizer.scale;

        newScale = (newScale - self.preScale) * 0.8 + self.preScale;

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


        CGRect newFrame = self.initalFrame;
        newFrame.size.height *= newScale;
        newFrame.size.width *= newScale;
        gestureRecognizer.view.frame = newFrame;
        self.preScale = newScale;
    }

}
要点是

  • 使用框架实现缩放
  • 将比例变量更改为慢速/快速缩放

结果显示,缩放速度过快实际上是链接答案代码中的一个错误。遗憾的是,这并没有真正回答我的实际问题(我仍然希望得到答案!),但它确实解决了我客户的问题

请注意,底部添加的一行将GestureRecognitor重置回1:

- (void)handlePinchGesture:(UIPinchGestureRecognizer *)gestureRecognizer {

        ...

        lastScale = [gestureRecognizer scale];  // Store the previous scale factor for the next pinch gesture call  

        gestureRecognizer.scale = 1;
        // ^ added this line
    }
}

您是否尝试手动设置
滚动视图
缩放比例
?@NicolasBonnet不幸的是,这个特定的缩放比例没有包装在滚动视图中,因此不可行:|我相信这也可以,但为什么要裁剪缩放比例值,我不认为有必要这样做。裁剪比例值是因为它会限制你的缩放属性。好吧,很抱歉,我看到我快速阅读了原始代码并错过了这一部分。不,这根本不起作用-有一些非常奇怪的反作用:|尝试了很多次,但似乎没有任何效果。哦,是的,没有在我的代码中添加那一行,这是我的错误。@HimanshuJoshi hrm。现在你让我想了想——也许你的建议终究会对这句台词起作用。我要试试看。
- (void)handlePinchGesture:(UIPinchGestureRecognizer *)gestureRecognizer {

        ...

        lastScale = [gestureRecognizer scale];  // Store the previous scale factor for the next pinch gesture call  

        gestureRecognizer.scale = 1;
        // ^ added this line
    }
}