您的位置:首页 > 移动开发 > Swift

Swift简单实现URL生成二维码,并保存到本地相册

2016-09-06 16:54 423 查看
根据项目的需求,所以这里主要介绍一下由链接生成的二维码,长按二维码,截取二维码部分保存到本地相册中。

最初我想用
UIImageWriteToSavedPhotosAlbum
方法直接把生成的二维码存入相册中,但是发现保存失败,感觉应该是类型问题出的错,所以我用了截屏的方法。

override func viewWillAppear(animated: Bool) {

qrCodeImageView.image = createQRForString(url,qrImageName: "QRCoreImage")

}

//创建二维码图片
func createQRForString(qrString: String?, qrImageName: String?) -> UIImage?{

let stringData = sureQRString.dataUsingEncoding(NSUTF8StringEncoding,
allowLossyConversion: false)

// 创建一个二维码的滤镜
let qrFilter = CIFilter(name: "CIQRCodeGenerator")!
qrFilter.setValue(stringData, forKey: "inputMessage")
qrFilter.setValue("H", forKey: "inputCorrectionLevel")
let qrCIImage = qrFilter.outputImage
// 创建一个颜色滤镜,黑白色
let colorFilter = CIFilter(name: "CIFalseColor")!
colorFilter.setDefaults()
colorFilter.setValue(qrCIImage, forKey: "inputImage")
colorFilter.setValue(CIColor(red: 0, green: 0, blue: 0), forKey: "inputColor0")
colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1")
// 返回二维码image
let codeImage = UIImage(CIImage: colorFilter.outputImage!

// 下面是将头像之类的图片放到二维码中
//            if let iconImage = UIImage(named: qrImageName!) {
//                let rect = CGRectMake(0, 0, codeImage.size.width, codeImage.size.height)
//                UIGraphicsBeginImageContext(rect.size)
//
//                codeImage.drawInRect(rect)
//                let avatarSize = CGSizeMake(rect.size.width * 0.25, rect.size.height * 0.25)
//                let x = (rect.width - avatarSize.width) * 0.5
//                let y = (rect.height - avatarSize.height) * 0.5
//                iconImage.drawInRect(CGRectMake(x, y, avatarSize.width, avatarSize.height))
//                let resultImage = UIGraphicsGetImageFromCurrentImageContext()
//
//                UIGraphicsEndImageContext()
//                return resultImage
//            }

return codeImage
}
return nil
}

override func viewDidLoad() {
super.viewDidLoad()

//添加长按事件
let upKeyGesture = UILongPressGestureRecognizer()
upKeyGesture.addTarget(self, action: "qrCodeButtonClicked:")
qrCodeButton.addGestureRecognizer(upKeyGesture)
}

//长按事件
func qrCodeButtonClicked(sender: UILongPressGestureRecognizer) {

if sender.state == UIGestureRecognizerState.Began{

// 开始截取二维码部分(设置截取大小)
UIGraphicsBeginImageContext(qrCodeImageView.bounds.size)

// 获得截取到的图像
let img : UIImage = UIGraphicsGetImageFromCurrentImageContext()

// 结束截取
UIGraphicsEndImageContext()

//将图片保存到本地
UIImageWriteToSavedPhotosAlbum(img, self, "image:didFinishSavingWithError:contextInfo:", nil)

}else if sender.state == UIGestureRecognizerState.Ended{

return
}

}

func image(image:UIImage,didFinishSavingWithError error:NSError?,contextInfo:AnyObject) {

if error != nil {
UIhelper.showToast("保存失败", view: self.view)

} else {
UIhelper.showToast("保存成功", view: self.view)
}
}


最后要注意的是,我在开始的时候,保存二维码,在本地相册中会同时保存两张,后来发现是长按方法执行了两次,所以进行了UIGestureRecognizerState的判断。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: