IMessage MSSticker представление, созданное из UIView неправильного размера - PullRequest
1 голос
/ 20 марта 2020

Эй, я боролся с этим уже пару дней и не могу найти никакой документации вне стандартных видов сетки для MSStickerView размеров

Я работаю над приложением, которое динамически создает MSStickerViews - он делает это путем преобразования 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 в файле просто ломает изображение - поэтому я застрял на этом - сеансы WWD C, кажется, показывают наклейки, созданные из путей к файлам и не меняющиеся по размеру при переходе между перетаскиванием - любая помощь будет оценена!

...