2

カスタムキーボードを作成していますが、ペーストボードに画像を追加したり、貼り付けた画像で適切なスケールと解像度を維持したりするのに問題があります。私の問題を説明するために、キーボードのスクリーンショットから始めましょう。

スクリーンショットの例

したがって、キーボードの左上にある顔の写真は、元の写真が背景に設定された単なる 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
4

1 に答える 1