如何在swift中使用调用这个函数

Posted

技术标签:

【中文标题】如何在swift中使用调用这个函数【英文标题】:How to use call this function in swift 【发布时间】:2018-08-26 15:28:23 【问题描述】:

我是 swift 新手,所以我想尝试使用此扩展程序来裁剪图像,但我不知道如何调用它 我已经尝试使用此代码调用它,但我收到了未使用的通知 如果我使用 uiimageview 设置宽度和高度,这可能吗? 感谢所有的答案真的很感激它

let size = CGSize(width: 500, height: 500)
            previewKTPImage.image?.crop(to: size)


import UIKit
extension UIImage 
    func crop(to:CGSize) -> UIImage 
        guard let cgimage = self.cgImage else  return self 

        let contextImage: UIImage = UIImage(cgImage: cgimage)

        let contextSize: CGSize = contextImage.size

        //Set to square
        var posX: CGFloat = 0.0
        var posY: CGFloat = 0.0
        let cropAspect: CGFloat = to.width / to.height

        var cropWidth: CGFloat = to.width
        var cropHeight: CGFloat = to.height

        if to.width > to.height  //Landscape
            cropWidth = contextSize.width
            cropHeight = contextSize.width / cropAspect
            posY = (contextSize.height - cropHeight) / 2
         else if to.width < to.height  //Portrait
            cropHeight = contextSize.height
            cropWidth = contextSize.height * cropAspect
            posX = (contextSize.width - cropWidth) / 2
         else  //Square
            if contextSize.width >= contextSize.height  //Square on landscape (or square)
                cropHeight = contextSize.height
                cropWidth = contextSize.height * cropAspect
                posX = (contextSize.width - cropWidth) / 2
            else //Square on portrait
                cropWidth = contextSize.width
                cropHeight = contextSize.width / cropAspect
                posY = (contextSize.height - cropHeight) / 2
            
        

        let rect: CGRect = CGRect(x : posX, y : posY, width : cropWidth, height : cropHeight)

        // Create bitmap image from context using the rect
        let imageRef: CGImage = contextImage.cgImage!.cropping(to: rect)!

        // Create a new image based on the imageRef and rotate back to the original orientation
        let cropped: UIImage = UIImage(cgImage: imageRef, scale: self.scale, orientation: self.imageOrientation)

        cropped.draw(in: CGRect(x : 0, y : 0, width : to.width, height : to.height))

        return cropped
    

【问题讨论】:

【参考方案1】:

你需要持有返回值

let result = previewKTPImage.image?.crop(to:CGSize(width: 500, height: 500))
previewKTPImage.image = result // note this will stretch it also so

根据需要配置contentMode

previewKTPImage.contentMode = .scaleAspectFit 

【讨论】:

这是因为您创建了一个新的裁剪图像,但您没有将其更新为旧图像。所以捕获result中的newImage并更新它

以上是关于如何在swift中使用调用这个函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中从.js文件中调用javascript函数

如何从 WKWebView Swift 调用这个 javascript 函数?

如何限制同时调用函数的多个定时器函数? Swift 3+

如何使用从 Swift 代码调用的线程在 C++ 上创建异步调用函数?

如何在 Swift 中使用完成处理程序链接函数?

在 Swift 中从字符串调用方法