dimensionar o autocolante da grelha da aplicação

criei um aplicativo de adesivo de iMessage iOS, e de acordo com a documentação da apple, devo ser capaz de exibir os adesivos em um de três tamanhos diferentes.

no entanto, independentemente do tamanho que eu faça as imagens autocolantes (300px por 300px, 408px por 408px, 618px por 618px) elas só aparecem como a opção da grelha do meio, com três autocolantes por linha. Alguém sabe como resolver este problema, talvez me esteja a escapar algo simples. A documentação sobre este tema é escassa porque é bastante novo. Obrigado pela ajuda.

Gráfico De Dimensionamento Autocolante

Ligação à documentação: https://developer.apple.com/ios/human-interface-guidelines/extensions/messaging/

Author: Ernesto Rivera, 2016-12-16

1 answers

Importar as imagens a 300x300, 408x408, ou 618x618 só irá afectar o tamanho que o autocolante aparece na conversa (quando enviado como mensagem inicial ou arrastado para uma bolha de mensagem existente. Mudar as dimensões das suas imagens não afetará a sua orientação no layout da grade.

Para alterar a disposição da grelha no StickerBrowserView, pode fazê-lo de duas formas:

  • Construtor de interfaces

Carregue na pasta StickerPack para que esteja realçada(ou seleccione qualquer Autocolante do seu pacote) e então poderá alterar a opção "Tamanho do Autocolante" do menu no inspector de atributos do lado direito para o seu estilo de apresentação preferido: pequeno(2 colunas), médio(3 colunas) ou grande(4 colunas). É tudo! Isto irá mudar cada autocolante para mostrar desta forma no layout. Independentemente do tamanho em que importar as suas imagens, a sua aplicação irá dimensioná-las para baixo / até às dimensões correctas para usar na opção escolhida. esquema.

Change Sticker Size from Interface Builder

  • programaticamente

Primeiro, configurar um novo projecto como uma" aplicação de mensagens", em seguida, criar um novo ficheiro para subclasse MSStickerBrowserViewController, criar um array para armazenar autocolantes, carregar/criar autocolantes(enquanto armazenam cada um na lista de autocolantes), e certifique-se de implementar os 2 métodos de fonte de dados necessários do MSStickerBrowserViewController. Para isso, você pode simplesmente arrastar suas imagens para as extensões Directorio.

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]
    }
}

No seu MessagesViewController (deverá estar lá automaticamente ao iniciar um novo projecto), crie uma instância do seu BrowserVC a partir da sua subclasse, defina o tamanho do autocolante, a moldura do browserVC, adicione subview à frente e carregue autocolantes à vista do navegador.

Controlador de mensagens.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()
    }
}

Para uma melhor informação, veja o vídeoda WWDC lançado no ano passado em autocolantes! Foi aqui que comecei a aprender a construir autocolantes., então procura a documentação!

 1
Author: Jake Dobson, 2017-06-08 00:53:25