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

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

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

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

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

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


person Ernesto Rivera    schedule 16.12.2016    source источник
comment
Я получаю ту же проблему, но мне интересно, это только потому, что у меня есть iPhoneSE (действует так же в симуляторе)   -  person jvcleave    schedule 22.12.2016


Ответы (1)


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

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

  • ИнтерфейсBuilder

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

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

  • Программно

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

ПодклассФайл.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.addChild(browserVC)
        browserVC.didMove(toParent: self)
        self.view.addSubview(browserVC.view)

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

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

person Jake Dobson    schedule 08.06.2017