简体   繁体   English

将PinchRecognizer Objective-C代码转换为Swift

[英]Convert PinchRecognizer Objective-C code to Swift

I am trying to translate the Objective-C code to Swift, can someone help. 我正在尝试将Objective-C代码转换为Swift,有人可以帮忙吗。 I am stuck on one line. 我被困在一条线上。

Objective-C Objective-C的

-(void)pinchDetected:(UIPinchGestureRecognizer *)pinchRecognizer

{   
    if([pinchRecognizer state] == UIGestureRecognizerStateBegan) {
        // Reset the last scale, necessary if there are multiple objects with different scales
        lastScale = [pinchRecognizer scale];
    }

    if ([pinchRecognizer state] == UIGestureRecognizerStateBegan ||[pinchRecognizer state] == UIGestureRecognizerStateChanged)
    {
        ###I NEED TO CONVERT THIS LINE
        CGFloat currentScale = [[[pinchRecognizer view].layer valueForKeyPath:@"transform.scale"] floatValue];

        const CGFloat maxScale = 1.5;
        const CGFloat minScale = 1.0;

        CGFloat newScale = 1 -  (lastScale - [pinchRecognizer scale]);
        newScale = MIN(newScale, maxScale / currentScale);
        newScale = MAX(newScale, minScale / currentScale);
        thePageViewController.view.transform = CGAffineTransformScale(thePageViewController.view.transform, newScale, newScale);
        lastScale = [pinchRecognizer scale];  // Store the previous scale factor for the next pinch gesture call
    }
}

Swift 迅速

func pinchDetected(pinchRecognizer: UIPinchGestureRecognizer) {

    var lastScale = pinchRecognizer.scale

    if(pinchRecognizer.state == UIGestureRecognizerState.Began) {
        // Reset the last scale, necessary if there are multiple objects with different scales
        lastScale = pinchRecognizer.scale
    }

    if (pinchRecognizer.state == UIGestureRecognizerState.Began || pinchRecognizer.state == UIGestureRecognizerState.Changed)
    {

        ###HOW DO I CONVERT THIS LINE TO SWIFT?
        var currentScale: CGFloat = [[[pinchRecognizer.view].layer valueForKeyPath:@"transform.scale"] floatValue];

        let maxScale: CGFloat = 1.5;
        let minScale: CGFloat = 1.0;

        var newScale: CGFloat = 1 -  (lastScale - pinchRecognizer.scale)
        newScale = min(newScale, maxScale / currentScale);
        newScale = max(newScale, minScale / currentScale);
        self.view.transform = CGAffineTransformScale(self.view.transform, newScale, newScale);
        lastScale = pinchRecognizer.scale  // Store the previous scale factor for the next pinch gesture call
    }

}

The Line you mentioned to convert can be done like this. 您提到的要转换的行可以这样完成。 This worked for me. 这对我有用。

var curScale = pinchRecognizer.view!.layer.valueForKeyPath("transform.scale")!.floatValue

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM