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