Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift3 动画iMessage应用程序图形_Swift3_Xcode8_Imessage Extension - Fatal编程技术网

Swift3 动画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))

我正在创建我自己的iMessage自定义应用程序,我只想发送一个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应用程序时,只有在收件人也安装了您的iMessage应用程序的情况下,他们才能查看您在应用程序中创建的自定义邮件内容(并通过或发送)。如果没有,他们会收到您内容的静态预览,以及一些用户界面,让收件人从应用商店安装您的应用

  • 当你有一个贴纸包时,在创建贴纸图像的过程中没有代码——它们只是资产。因此,苹果的iMessage服务可以将这些资产传递给任何设备上的任何人,任何人都可以查看这些资产,无论他们的设备上是否安装了你的应用程序。(不管他们是否可以安装你的应用程序。定制贴纸应用程序只能安装在iOS上,但macOS和watchOS可以接收贴纸。)

因此,要获得动画贴纸,只需创建动画资源。首选的格式是,Xcode支持从PNG图像序列自动创建APNG动画贴纸-只需在编辑器中查找您的
Xcstickets
包。或者在Apple开发者网站上观看教程和视频

请注意,您还可以将这两者结合起来—您可以拥有一个iMessage应用程序,该应用程序可以使用类动态创建新标签并将其发送给其他用户。在这种情况下,标签是动态的,因为你的应用程序正在运行时创建它们,但创建后它们是静态资产,这意味着iMessage服务可以分发它们,收件人不需要安装你的应用程序来查看它们

如果动态创建标签,则需要在将其传递给类之前,在应用程序中写入标签资产文件。如果使用动画图像执行此操作,则可以使用
cgimagestination
API创建APNG文件-请参阅


以上内容试图回答您的问题的实际主题——在iMessage中发送动画贴纸。但是您的代码中也有一些更具体的混淆,所以这里有一个尝试来解决这个问题

您的方法返回一个
UIImage
。该类不支持动画,只支持静态图像。如果你想用动画做任何事情,你需要一些不同的东西来表现一个(如上面的
CGImageDestination
所示)


UIImageView
可以通过一系列的
UIImage
s来呈现动画。但是当你使用
drawHierarchy(in:AfterScreenuUpdate:)
时,你正在拍摄该视图的屏幕截图,创建一个静态图像。

iMessage丰富的消息扩展有两种:iMessage应用程序和贴纸包

  • 当您有iMessage应用程序时,只有在收件人也安装了您的iMessage应用程序的情况下,他们才能查看您在应用程序中创建的自定义邮件内容(并通过或发送)。如果没有,他们会收到您内容的静态预览,以及一些用户界面,让收件人从应用商店安装您的应用

  • 当你有一个贴纸包时,在创建贴纸图像的过程中没有代码——它们只是资产。因此,苹果的iMessage服务可以将这些资产传递给任何设备上的任何人,任何人都可以查看这些资产,无论他们的设备上是否安装了你的应用程序。(不管他们是否可以安装你的应用程序。定制贴纸应用程序只能安装在iOS上,但macOS和watchOS可以接收贴纸。)

因此,要获得动画贴纸,只需创建动画资源。首选的格式是,Xcode支持从PNG图像序列自动创建APNG动画贴纸-只需在编辑器中查找您的
Xcstickets
包。或者在Apple开发者网站上观看教程和视频

请注意,您还可以将这两者结合起来—您可以拥有一个iMessage应用程序,该应用程序可以使用类动态创建新标签并将其发送给其他用户。在这种情况下,标签是动态的,因为你的应用程序正在运行时创建它们,但创建后它们是静态资产,这意味着iMessage服务可以分发它们,收件人不需要安装你的应用程序来查看它们

如果动态创建标签,则需要在将其传递给类之前,在应用程序中写入标签资产文件。如果使用动画图像执行此操作,则可以使用
cgimagestination
API创建APNG文件-请参阅


以上内容试图回答您的问题的实际主题——在iMessage中发送动画贴纸。但是您的代码中也有一些更具体的混淆,所以这里有一个尝试来解决这个问题

您的方法返回一个
UIImage
。该类不支持动画,只支持静态图像。如果你想用动画做任何事情,你需要一些不同的东西来表现一个(如上面的
CGImageDestination
所示)


UIImageView
可以通过一系列的
UIImage
s来呈现动画。但是,当您使用
drawHierarchy(in:AfterScreenuUpdate:)
时,您正在拍摄该视图的屏幕截图,创建一个静态图像。

您找到了解决方案吗?您找到了解决方案吗?