2016-11-10 33 views
1

我創造我自己的iMessage自定義應用,我只是想與2個圖像之間交換後臺發送的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 
} 
+0

你有沒有找到任何解決方案呢? – bittu

回答

0

iMessage的豐富消息傳遞擴展有兩種:iMessage Apps和Sticker Packs。

  • 當你有一個應用程序的iMessage,你在你的應用程序創建(並通過MSMessageMSSession發送)自定義消息的內容可以由收件人被視爲只有當他們也有您的iMessage應用程序安裝。如果他們不這樣做,他們會收到您的內容的靜態預覽,以及一些可讓收件人從App Store安裝應用程序的用戶界面。

  • 當你有一個貼圖包,有沒有參與創建的貼紙圖片代碼 - 他們只是資產。因此,Apple的iMessage服務可以將這些資產傳遞給任何設備上的任何人,任何人都可以查看它們,無論他們的設備上是否安裝了應用程序。剛(也不管他們甚至可能安裝應用程式。自定義標籤的應用程序只能在iOS上安裝,但MacOS和watchOS可以收到貼紙。)

所以,有動畫貼紙,你需要創建動畫資產。造成這種情況的首選格式是APNG,而且也支持在Xcode從PNG圖像序列自動創建APNG動畫貼紙 - 只要看看在編輯器中爲您xcstickers包。或者在蘋果開發者網站上關注Creating Stickers for iMessage上的教程和視頻。

請注意,您也可以將兩者結合 - 您可以使用iMessage應用程序動態創建MSSticker類的新貼紙並將它們發送給其他用戶。在這種情況下,貼紙是動態的,因爲您的應用程序在運行時創建它們,但創建後它們是靜態資產,這意味着iMessage服務可以分發它們,並且收件人不需要安裝應用程序即可查看它們。

如果創建動態貼你需要寫在你的應用程序貼紙資源文件將它傳遞給MSSticker上課前。如果你正在做與動畫圖像,你可以使用CGImageDestination API創建APNG文件 - 見this bit in Apple's Image I/O Programming Guide


以上是試圖回答什麼似乎是你的問題的實際主題 - 在iMessage中發送動畫貼紙。但是你也有你的代碼的一些更具體的混亂,所以這裏的解決這一企圖......

你的方法返回一個UIImage。該課程不支持動畫,只支持靜態圖片。如果你想用動畫做任何事情,你需要不同的東西來代表一個動畫(如上面的CGImageDestination所示)。

UIImageView可以通過被賦予了序列UIImage小號動畫。但是,當您使用drawHierarchy(in:afterScreenUpdates:)時,您將拍攝該視圖的屏幕截圖,創建一個靜態圖像。