从UIView创建的IMessage MSSticker视图大小不正确



嘿,我已经为此挣扎了几天,似乎在MSStickerView尺寸的标准网格视图之外找不到任何文档

我正在开发一个动态创建MSStickerViews的应用程序,它通过将UIView转换为UIImage来实现这一点,将其保存到磁盘,然后在创建MSStickerView之前将URL传递给MSSticker,然后将其帧设置为原始视图的大小。

我遇到的问题是,当我将MSStickerView拖动到消息窗口中时,MSStickerView在拖动时会收缩,然后当它被拖到消息窗口时,会变大。我不知道如何控制拖动时的大小或最终图像大小

这是我从视图创建图像的代码

extension UIView {
func imageFromView() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.isOpaque, 0.0)
defer { UIGraphicsEndImageContext() }
if let context = UIGraphicsGetCurrentContext() {
self.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()
return image
}
return nil
}
}

这是将其保存到磁盘的代码

extension UIImage {
func savedPath(name: String) -> URL{
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let filePath = "(paths[0])/name.png"
let url = URL(fileURLWithPath: filePath)
// Save image.
if let data = self.pngData() {
do {
try data.write(to: url)
} catch let error as NSError {
}
}
return url
}
}

最后是将数据路径转换为贴纸的代码

if let stickerImage = backgroundBox.imageFromView() {
let url = stickerImage.savedPath(name: textBox.text ?? "StickerMCSticker")
if let msSticker = try? MSSticker(contentsOfFileURL: url, localizedDescription: "") {
var newFrame = self.backgroundBox.frame
newFrame.size.width = newFrame.size.width
newFrame.size.height = newFrame.size.height
let stickerView = MSStickerView(frame: newFrame, sticker: msSticker)
self.view.addSubview(stickerView)
print("** sticker frame (stickerView.frame)")
self.sticker = stickerView
}
}

首先,我想知道我是否需要对视网膜大小做些什么,但在文件中添加@2x只会破坏图像-所以我一直坚持这一点-WWDC会话似乎显示贴纸是从文件路径创建的,在拖放之间的转换中没有改变大小-如果有任何帮助,我们将不胜感激!

我最终解决了这个问题,从我正在复制的视图中获取帧,然后调用sizeToFit()-

init(sticker: MSSticker, size: CGSize) {
let stickerFrame = CGRect(x: 0, y: 0, width: size.width, height: size.height)
self.sticker = MSStickerView(frame: stickerFrame, sticker: sticker)
self.sticker.sizeToFit()
super.init(nibName: nil, bund

因为StickerView没有设置正确的大小。从本质上讲,我看到的经验是,我视图上的贴纸大小与MSSticker的大小不准确-因此,在拖动初始化的那一刻,实际的贴纸大小就实现了(这与我在视图中应用的框架大小/autoLayout不同(

最新更新