我正在创建自己的 iMessage 自定义应用程序,我只想发送一个带有在 2 个图像之间交换背景的 iMessage,从而创建动画的错觉。我什至不确定这是否可能,但我正在尝试使用下面的代码。此代码仅在收件人收到消息时显示第一张图像。任何帮助,将不胜感激。
func createImageForMessage() -> UIImage? {
let cupAnimation = UIImageView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
let imagesListArray = [UIImage(named: "boy_cup_1_1.png")!,UIImage(named: "boy_cup_1_7.png")!]
cupAnimation.animationImages = imagesListArray
cupAnimation.animationDuration = 10.0
cupAnimation.animationRepeatCount = 50
cupAnimation.startAnimating()
let cupBackground = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
cupBackground.addSubview(cupAnimation)
background.addSubview(cupBackground)
background.frame.origin = CGPoint(x: view.frame.size.width, y: view.frame.size.height)
view.addSubview(background)
UIGraphicsBeginImageContextWithOptions(background.frame.size, false, UIScreen.main.scale)
background.drawHierarchy(in: background.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
background.removeFromSuperview()
return image
}
iMessage 的丰富消息传递扩展有两种:iMessage 应用程序和贴纸包。
当您有 iMessage 应用程序时,您在应用程序中创建的自定义消息内容(并通过MSMessage or MSSession) 收件人可以查看仅当他们也安装了您的 iMessage 应用程序时。如果他们不这样做,他们会收到您内容的静态预览,以及一些允许收件人从 App Store 安装您的应用程序的 UI。
当您拥有贴纸包时,创建贴纸图像时不需要任何代码 - 它们只是资产。因此,Apple 的 iMessage 服务可以将这些资产传递给任何设备上的任何人,并且任何人都可以查看它们,无论他们的设备上是否安装了您的应用程序。 (而且无论他们是否could安装了您的应用程序。自定义贴纸应用程序只能安装在 iOS 上,但 macOS 和 watchOS 可以接收贴纸。)
因此,要拥有动画贴纸,您只需创建动画资源即可。首选格式是APNG,并且 Xcode 支持从 PNG 图像序列自动创建 APNG 动画贴纸 - 只需在编辑器中查找您的xcstickers
捆。或者按照以下教程和视频进行操作为 iMessage 创建贴纸在苹果开发者网站上。
请注意,您也可以将两者结合起来 - 您可以拥有一个 iMessage 应用程序,该应用程序可以动态创建新的贴纸MSSticker类并将它们发送给其他用户。在这种情况下,贴纸是动态的,因为您的应用程序在运行时创建它们,但创建后它们是静态资产,这意味着 iMessage 服务可以分发它们,并且收件人不需要安装您的应用程序即可查看它们。
如果您动态创建贴纸,则需要在应用程序中写入贴纸资源文件,然后再将其传递给MSSticker班级。如果您对动画图像执行此操作,则可以使用以下命令创建 APNG 文件CGImageDestination
API — 参见Apple 的图像 I/O 编程指南中的这一点.
以上是试图回答您问题的实际主题——在 iMessage 中发送动画贴纸。但是您的代码中也存在一些更具体的混乱,因此这里尝试解决这个问题......
你的方法返回一个UIImage
。该类不支持动画,仅支持静态图像。如果您想对动画做任何事情,您将需要不同的东西来表示动画(如CGImageDestination
above).
UIImageView
can present动画通过给予sequence of UIImage
s。但是当你使用drawHierarchy(in:afterScreenUpdates:)
您正在对该视图进行屏幕截图,创建一个静态图像。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)