gpt4 book ai didi

ios - 如何为 iMessage Sticker App Grid Sticker 提供不同尺寸

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:26:16 27 4
gpt4 key购买 nike

我已经创建了一个 iOS iMessage 贴纸应用程序,根据苹果文档,我应该能够以三种不同尺寸之一显示贴纸。

但是,无论我制作什么尺寸的贴纸图像(300 像素 x 300 像素、408 像素 x 408 像素、618 像素 x 618 像素),它们都只会显示为中间网格选项,每行三个贴纸。有谁知道如何解决这个问题,也许我遗漏了一些简单的东西?

关于这个主题的文档很少,因为它是相当新的。谢谢您的帮助。

Sticker Sizing Chart

文档链接:https://developer.apple.com/ios/human-interface-guidelines/extensions/messaging/

最佳答案

导入 300x300、408x408 或 618x618 的图像只会影响贴纸在对话中显示的大小(当作为初始消息发送或拖到现有消息气泡上时。更改图像的尺寸不会影响它在网格布局。

要更改 StickerBrowserView 中的网格布局,您可以通过以下两种方式之一进行:

  • 界面生成器

单击 StickerPack 文件夹使其突出显示(或从您的包中选择任何贴纸),然后您可以从右侧属性检查器的下拉菜单中将“贴纸大小”选项更改为您喜欢的显示方式样式:小(2 列)、中(3 列)或大(4 列)。就这样!这将更改每个标签以在布局中以这种方式显示。无论您以什么尺寸导入图像,您的应用程序都会将其缩小/放大到正确的尺寸,以便在所选布局中使用。

Change Sticker Size from Interface Builder

  • 程序化

首先,将一个新项目设置为“消息应用程序”,然后创建一个新文件作为 MSStickerBrowserViewController 的子类,创建数组来存储贴纸,加载/创建贴纸(同时将每个贴纸存储到贴纸数组中),并确保实现MSStickerBrowserViewController 的 2 个必需的数据源方法。为此,您只需将图像拖到扩展目录中即可。

子类文件.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 框架,将 subview 添加到前面,并将标签加载到浏览器 View 。

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 video去年在 Stickers 上发布!这是我开始学习制作贴纸的地方,然后打开文档!

关于ios - 如何为 iMessage Sticker App Grid Sticker 提供不同尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41179528/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com