嘿,我已经为此苦苦挣扎了几天,似乎在标准网格视图之外找不到任何关于MSStickerView
尺寸的文档
我正在开发一个MSStickerViews
动态创建的应用程序 - 它通过将 a 转换UIView
为将其UIImage
保存到磁盘然后将 URL 传递给MSSticker
在创建MSStickerView
框架之前将其设置为原始视图的大小来实现这一点。
我遇到的问题是,当我将其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 会话似乎显示贴纸是从文件路径创建的而不是改变拖放之间过渡的大小 - 任何帮助将不胜感激!