Swift3 动画iMessage应用程序图形
我正在创建我自己的iMessage自定义应用程序,我只想发送一个iMessage,背景在两个图像之间切换,因此创建动画效果。我甚至不确定这是否可行,但我正在尝试下面的代码。此代码仅在收件人收到邮件时显示第一个图像。任何帮助都将不胜感激Swift3 动画iMessage应用程序图形,swift3,xcode8,imessage-extension,Swift3,Xcode8,Imessage Extension,我正在创建我自己的iMessage自定义应用程序,我只想发送一个iMessage,背景在两个图像之间切换,因此创建动画效果。我甚至不确定这是否可行,但我正在尝试下面的代码。此代码仅在收件人收到邮件时显示第一个图像。任何帮助都将不胜感激 func createImageForMessage() -> UIImage? { let cupAnimation = UIImageView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
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应用程序时,只有在收件人也安装了您的iMessage应用程序的情况下,他们才能查看您在应用程序中创建的自定义邮件内容(并通过或发送)。如果没有,他们会收到您内容的静态预览,以及一些用户界面,让收件人从应用商店安装您的应用
- 当你有一个贴纸包时,在创建贴纸图像的过程中没有代码——它们只是资产。因此,苹果的iMessage服务可以将这些资产传递给任何设备上的任何人,任何人都可以查看这些资产,无论他们的设备上是否安装了你的应用程序。(不管他们是否可以安装你的应用程序。定制贴纸应用程序只能安装在iOS上,但macOS和watchOS可以接收贴纸。)
Xcstickets
包。或者在Apple开发者网站上观看教程和视频
请注意,您还可以将这两者结合起来—您可以拥有一个iMessage应用程序,该应用程序可以使用类动态创建新标签并将其发送给其他用户。在这种情况下,标签是动态的,因为你的应用程序正在运行时创建它们,但创建后它们是静态资产,这意味着iMessage服务可以分发它们,收件人不需要安装你的应用程序来查看它们
如果动态创建标签,则需要在将其传递给类之前,在应用程序中写入标签资产文件。如果使用动画图像执行此操作,则可以使用cgimagestination
API创建APNG文件-请参阅
以上内容试图回答您的问题的实际主题——在iMessage中发送动画贴纸。但是您的代码中也有一些更具体的混淆,所以这里有一个尝试来解决这个问题 您的方法返回一个
UIImage
。该类不支持动画,只支持静态图像。如果你想用动画做任何事情,你需要一些不同的东西来表现一个(如上面的CGImageDestination
所示)
UIImageView
可以通过一系列的UIImage
s来呈现动画。但是当你使用drawHierarchy(in:AfterScreenuUpdate:)
时,你正在拍摄该视图的屏幕截图,创建一个静态图像。iMessage丰富的消息扩展有两种:iMessage应用程序和贴纸包
- 当您有iMessage应用程序时,只有在收件人也安装了您的iMessage应用程序的情况下,他们才能查看您在应用程序中创建的自定义邮件内容(并通过或发送)。如果没有,他们会收到您内容的静态预览,以及一些用户界面,让收件人从应用商店安装您的应用
- 当你有一个贴纸包时,在创建贴纸图像的过程中没有代码——它们只是资产。因此,苹果的iMessage服务可以将这些资产传递给任何设备上的任何人,任何人都可以查看这些资产,无论他们的设备上是否安装了你的应用程序。(不管他们是否可以安装你的应用程序。定制贴纸应用程序只能安装在iOS上,但macOS和watchOS可以接收贴纸。)
Xcstickets
包。或者在Apple开发者网站上观看教程和视频
请注意,您还可以将这两者结合起来—您可以拥有一个iMessage应用程序,该应用程序可以使用类动态创建新标签并将其发送给其他用户。在这种情况下,标签是动态的,因为你的应用程序正在运行时创建它们,但创建后它们是静态资产,这意味着iMessage服务可以分发它们,收件人不需要安装你的应用程序来查看它们
如果动态创建标签,则需要在将其传递给类之前,在应用程序中写入标签资产文件。如果使用动画图像执行此操作,则可以使用cgimagestination
API创建APNG文件-请参阅
以上内容试图回答您的问题的实际主题——在iMessage中发送动画贴纸。但是您的代码中也有一些更具体的混淆,所以这里有一个尝试来解决这个问题 您的方法返回一个
UIImage
。该类不支持动画,只支持静态图像。如果你想用动画做任何事情,你需要一些不同的东西来表现一个(如上面的CGImageDestination
所示)
UIImageView
可以通过一系列的UIImage
s来呈现动画。但是,当您使用drawHierarchy(in:AfterScreenuUpdate:)
时,您正在拍摄该视图的屏幕截图,创建一个静态图像。您找到了解决方案吗?您找到了解决方案吗?