将 PinchRecognizer Objective-C 代码转换为 Swift

Posted

技术标签:

【中文标题】将 PinchRecognizer Objective-C 代码转换为 Swift【英文标题】:Convert PinchRecognizer Objective-C code to Swift 【发布时间】:2015-04-22 04:04:21 【问题描述】:

我正在尝试将 Objective-C 代码翻译成 Swift,有人可以帮忙吗?我被困在一条线上。

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
    

斯威夫特

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
    


【问题讨论】:

【参考方案1】:

您提到的要转换的 Line 可以这样完成。这对我有用。

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

【讨论】:

以上是关于将 PinchRecognizer Objective-C 代码转换为 Swift的主要内容,如果未能解决你的问题,请参考以下文章

将 Mongo ObjectId 保存到另一个文档中

使用共享扩展将图像保存到文档文件夹

Mongoose - 删除子文档数组项

已插入但尚未保存的 NSManagedObject?

Kotlin - 可空字段的非空 getter

如何使用 jQuery 获取 -webkit-transition-duration 属性?