我正在构建一个自定义键盘,并且无法将图像添加到粘贴板并在粘贴的图像中保持适当的比例和分辨率。让我从键盘的截图开始,以说明我的麻烦:
所以键盘左上角的人脸图片只是一个UIButton,将原始照片设置为背景。按下按钮时,使用以下功能调整图像大小:
func imageResize(image:UIImage, size:CGSize)-> UIImage {
let scale = UIScreen.mainScreen().scale
UIGraphicsBeginImageContextWithOptions(size, false, scale)
var context = UIGraphicsGetCurrentContext()
CGContextSetInterpolationQuality(context, kCGInterpolationHigh)
image.drawInRect(CGRect(origin: CGPointZero, size: size))
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return scaledImage
}
此函数创建一个与 UIButton 大小相同的 UIImage,并具有适当的比例以反映设备的屏幕分辨率。为了验证函数是否正确,我添加了一个填充了缩放图像的 UIImageView。缩放图像是在键盘中心附近看起来错位的图像。我用这个函数添加了 UIImageView:
func addImageToBottomRight(image: UIImage) {
var tempImgView = UIImageView(image: image)
self.view.addSubview(tempImgView)
tempImgView.frame.offset(dx: 100.0, dy: 50.0)
}
我尝试了几种不同的方法将图像添加到粘贴板,但似乎都忽略了图像的比例并将其显示为两倍大,而不是以更高分辨率显示:
let pb = UIPasteboard.generalPasteboard()!
var pngType = UIPasteboardTypeListImage[0] as! String
var jpegType = UIPasteboardTypeListImage[2] as! String
pb.image = image
pb.setData(UIImagePNGRepresentation(image), forPasteboardType: pngType)
pb.setData(UIImageJPEGRepresentation(image, 1.0), forPasteboardType: jpegType)
所有这三种方法都不能正常工作,并产生与屏幕截图所示相同的结果。有人对其他方法有任何建议吗?为了进一步阐明我的目标,我希望消息文本框中的图像在大小和分辨率方面看起来与键盘中的两个 UIImage 相同。
以下是 UIImage 之前的一些属性并调整大小以防有人好奇:
Starting Image Size is (750.0, 750.0)
Size to scale to is: (78.0, 78.0))
Initial Scale: 1.0
Resized Image Size is (78.0, 78.0)
Resized Image Scale: 2.0