嘿,我已经在这个问题上挣扎了几天,除了标准的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会话似乎显示了从文件路径创建的贴纸,并且在拖放之间的过渡中大小没有改变-任何帮助都将不胜感激!
发布于 2020-06-15 18:16:16
我最终修复了这个问题,从我正在复制的视图中获取帧,然后调用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不同)
https://stackoverflow.com/questions/60774745
复制相似问题