カスタムキーボードを作成していますが、ペーストボードに画像を追加したり、貼り付けた画像で適切なスケールと解像度を維持したりするのに問題があります。私の問題を説明するために、キーボードのスクリーンショットから始めましょう。
したがって、キーボードの左上にある顔の写真は、元の写真が背景に設定された単なる 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)
}
画像をペーストボードに追加するためにいくつかの異なる方法を試しましたが、すべて画像のスケールを無視し、より高い解像度で表示するのではなく、2 倍の大きさで表示しているようです。
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)
これら 3 つの方法はすべて正しく機能せず、スクリーンショットに示されているのと同じ結果になります。他の方法の提案はありますか?私の目標をさらに明確にするために、メッセージ テキスト ボックスの画像が、サイズと解像度の点でキーボードの両方の 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