2016-11-10 6 views
1

나는 내 자신의 iMessage 사용자 정의 응용 프로그램을 만들고 있는데, 나는 단순히 2 개의 이미지를 스왑하는 배경을 가진 iMessage를 보내려고하므로 애니메이션의 환상을 만듭니다. 나는 이것이 가능하다고 확신하지는 않지만 아래 코드로 시도하고있다. 이 코드는 수신자가 메시지를 수신했을 때 첫 번째 이미지 만 표시합니다. 어떤 도움을 주시면 감사하겠습니다.애니메이션 iMessage App Graphics

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 Pack의 두 가지가 있습니다. 그들은 또한 귀하의 iMessage를 응용 프로그램이을 설치 한 경우에만

  • 당신이 iMessage를 앱, 앱에서 만든 (그리고 MSMessage 또는 MSSession를 통해 전송) 사용자 정의 메시지 내용이

    은받는 사람 볼 수 있습니다. 그렇지 않은 경우 수신자가 앱 스토어에서 앱을 설치할 수있는 UI와 함께 콘텐츠의 정적 미리보기를 받게됩니다.

  • 스티커 팩을 가지고있을 때 스티커 이미지를 만드는 데 관련된 코드가 없습니다. 단지 애셋 일뿐입니다. 따라서 애플의 iMessage 서비스는 그 자산을 어떤 기기의 누구에게나 전달할 수 있으며, 앱을 기기에 설치했는지 여부에 관계없이 누구나 볼 수있다. (그리고 관계없이 그들은 심지어 이 앱을 설치 한 수 있는지 여부. 사용자 정의 스티커 애플리케이션은 아이폰 OS에서만 설치 될 수 있지만, 맥 OS 및 watchOS 스티커를받을 수 있습니다.)

그래서, 애니메이션 가지고 스티커, 당신은 단지 애니메이션 저작물을 만들어야합니다. 이 형식의 기본 형식은 APNG이며 XNG에서는 PNG 이미지 시퀀스에서 APNG 애니메이션 스티커를 자동으로 만들 수 있습니다. xcstickers 번들의 편집기를 보면됩니다. 또는 Apple Developer 사이트의 자습서 및 비디오 Creating Stickers for iMessage을 따르십시오.

두 가지를 결합 할 수도 있습니다. MSSticker 클래스로 새 스티커를 동적으로 생성하고 다른 사용자에게 전송하는 iMessage 앱을 사용할 수 있습니다. 이 경우 앱이 런타임에 앱을 생성한다는 점에서 다이나믹하지만, 생성 후에 정적 애셋이므로 iMessage 서비스는 앱을 배포 할 수 있으며 수신자는 앱을 설치하지 않아도 앱을 볼 수 있습니다.

동적으로 스티커를 만드는 경우 MSSticker 클래스에 전달하기 전에 스티커 애셋 파일을 앱에 작성해야합니다. 애니메이션 이미지로 작업하는 경우 CGImageDestination API를 사용하여 APNG 파일을 만들 수 있습니다 (this bit in Apple's Image I/O Programming Guide 참조).


위의 내용은 질문의 실제 주제 인 iMessage에서 애니메이션 스티커를 보내는 것에 대한 대답입니다. 그러나 코드에 좀 더 구체적인 혼란이 있으므로 여기에 그 문제를 해결하기위한 시도가 있습니다 ...

메서드가 UIImage을 반환합니다. 이 클래스는 애니메이션을 지원하지 않으며 정적 이미지 만 지원합니다. 애니메이션을 사용하여 무엇인가를하고 싶다면 위의 그림처럼 CGImageDestination과 같이 다른 표현이 필요합니다.

UIImageView시퀀스를UIImage의 S 부여 됨으로써 본 애니메이션 있다. 그러나 drawHierarchy(in:afterScreenUpdates:)을 사용하면 해당 뷰의 스크린 샷을 찍어 하나의 정적 이미지를 만듭니다.