1

我的 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)

用户界面的图像:

用户界面

4

0 回答 0