Как предоставить разные размеры для iMessage Sticker App Grid Sticker

Я создал приложение для стикеров iOS iMessage, и, согласно документации Apple, я должен иметь возможность отображать стикеры одного из трех разных размеров.

Однако независимо от того, какого размера я делаю изображения стикеров (300 на 300 пикселей, 408 на 408 пикселей, 618 на 618 пикселей), они отображаются только в качестве средней сетки, с тремя наклейками на строку. Кто-нибудь знает, как решить эту проблему, может быть, я упускаю что-то простое?

Документации по этой теме мало, потому что она довольно новая. Спасибо за помощь.

Таблица размеров наклеек

Ссылка на документацию: https://developer.apple.com/ios/human-interface-guidelines/extensions/messaging/

1 ответ

Импорт изображений с размерами 300x300, 408x408 или 618x618 повлияет ТОЛЬКО на размер стикера, отображаемого в диалоге (при отправке в качестве исходного сообщения или перетаскивании в существующий пузырь сообщения. Изменение размеров ваших изображений НЕ повлияет на его ориентацию в макете сетки).,

Чтобы изменить расположение сетки в StickerBrowserView, вы можете сделать это одним из двух способов:

  • InterfaceBuilder

Нажмите на папку StickerPack, чтобы она была выделена (или выберите любую наклейку из вашей упаковки), а затем вы можете изменить опцию "Размер наклейки" из выпадающего меню в инспекторе атрибутов справа на предпочитаемый стиль презентации: маленький (2 столбца), средний (3 столбца) или большой (4 столбца). Это все! Это изменит каждую наклейку для отображения таким образом в макете. Независимо от того, в каком размере вы импортируете свои изображения, ваше приложение будет уменьшать / увеличивать его до нужных размеров для использования в выбранном макете.

Изменить размер стикера в Интерфейсном Разработчике

  • Программный

Сначала настройте новый проект как "приложение сообщений", затем создайте новый файл для подкласса MSStickerBrowserViewController, создайте массив для хранения стикеров, загрузите / создайте стикеры (сохраняя каждый в массив стикеров) и убедитесь, что реализованы 2 требуемых методы источника данных MSStickerBrowserViewController. Для этого вы можете просто перетащить ваши изображения в каталог расширений.

SubclassFile.Swift

import UIKit
import Messages

class MyBrowserVC: MSStickerBrowserViewController {

    //create stickers array
    var stickers = [MSSticker]()

    //load assets into stickers array
    func loadStickers() {
        createSticker(asset: "boycott", localizedDescription: "boycottSticker")
        createSticker(asset: "alluminaughty", localizedDescription: "alluminaughtySticker")
        createSticker(asset: "beer", localizedDescription: "beerSticker")
    }

    //func to create sticker
    func createSticker(asset: String, localizedDescription: String) {

        //create url from assets in main bundle
        guard let stickerPath = Bundle.main.path(forResource: asset, ofType: "png") else {
            print("Couldn't create sticker path for", asset)
            return
        }
        let stickerURL = URL(fileURLWithPath: stickerPath)
        let sticker: MSSticker

        //create sticker from path(and localized description) and add to array
        do {
            try sticker = MSSticker(contentsOfFileURL: stickerURL,
                                 localizedDescription: localizedDescription)
            stickers.append(sticker)
        } catch {
            print(error)
            return
        }
    }

    //datasource methods
    override func numberOfStickers(in stickerBrowserView: MSStickerBrowserView) -> Int {
        return stickers.count
    }
    override func stickerBrowserView(_ stickerBrowserView: MSStickerBrowserView,
                                          stickerAt index: Int) -> MSSticker {
        return stickers[index]
    }
}

В вашем MessagesViewController(должен быть автоматически при начале нового проекта), создайте экземпляр вашего BrowserVC из вашего подкласса, установите размер стикера, рамку browserVC, добавьте подпредставление впереди и загрузите стикеры в представление браузера.

MessageViewController.swift

import UIKit
import Messages

class MessagesViewController: MSMessagesAppViewController {

    //create BrowserVC instance of Subclass
    var browserVC: MyBrowserVC!

    override func viewDidLoad() {
        super.viewDidLoad()

    //the next line of code is where you can adjust the "grid layout"
    //your options are: .small(2 columns), .regular(3 columns), or .large(4 columns)

        //instantiate browserVC with sticker size and set frame
        browserVC = MyBrowserVC(stickerSize: .regular)
        browserVC.view.frame = self.view.frame

        //send browserVC to front
        self.addChildViewController(browserVC)
        browserVC.didMove(toParentViewController: self)
        self.view.addSubview(browserVC.view)

        //load stickers onto the browser view
        browserVC.loadStickers()
        browserVC.stickerBrowserView.reloadData()
    }
}

Для получения дополнительной информации, посмотрите видео WWDC, выпущенное в прошлом году на наклейках! Именно здесь я начал учиться создавать стикеры, а затем приступил к разработке документации!

Другие вопросы по тегам