我的 iMessage 扩展程序目前正在根据文本输入生成图像,并将它们作为 MSStickerView 中的贴纸呈现给用户。用户可以通过滑动条操纵贴纸的大小。为此,我正在缩放生成的图像,添加贴纸,然后使用 sizeToFit() 调整 MSStickerView 的大小。
问题是 StickerView 和 Sticker 显示的尺寸只会减小,但只有在 Extension 视图切换时才会增加(从大到小或反之亦然)。我知道该视图使用缓存的图像,这就是为什么我要根据文本输入和大小使用名称保存图像的原因。但是,我希望使用其他一些缓存系统,这会阻止我使用更大的图像。
有没有办法让我以编程方式触发重新加载,类似于切换视图时发生的重新加载,或者只是手动调整 MSStickerView 的大小?
func createSticker(_ sender: Any) {
deleteStoredImage(fileName: lastFileName)
// generate a Sticker from the text in the UITextField
var inputText = " "
inputText = textInput.text!
if(inputText.characters.count == 0){
inputText = " "
}
var stickerImage = inputText.image()
stickerImage = resizeImage(image: stickerImage!, targetHeight: CGFloat(sizeSlider.value*150))
// create a unique filename from text+size
let filename = inputText+String(sizeSlider.value)+"Sticker.png"
lastFileName = filename
print("attempting to write file: " + filename)
storeImage(img: stickerImage!, fileName: filename)
// load the recently stored image into an MSSticker
var textSticker: MSSticker!
let url = getDocumentsDirectory().appendingPathComponent(filename)
do {
textSticker = try MSSticker(contentsOfFileURL: url, localizedDescription: "")
} catch {
print(error)
}
// display the sticker in the stickerView and resize/ move it accordingly
stickerView.sticker = textSticker
stickerView.sizeToFit()
stickerView.center = CGPoint(x: stickerContainer.center.x, y: stickerContainer.center.y*0.6)
用户界面的图像: