2016-09-29 5 views
0

みんな、みんなSwiftのmsステッカーに慣れていますが、msstickerとmsstickerviewの目的/違いを理解しようとしています。私はここでAPIをhttps://developer.apple.com/reference/messages/msstickerview/1648434-stickerと読んでいますが、この比較的簡単な問題の答えを見つけることはできません。MSStickerBrowserViewにMSSticker(StickerViewsではなく)を追加するだけで、表示できる唯一の方法です。しかし、私は実装しようとしているカスタムのステッカービュークラスを持っているので、私はStickerVIEWSを追加する必要があります。ステッカーのVIEWSをブラウザビューに素早く追加するには?

私のステッカーはここに私のブラウザビューに追加されます。

func loadStickers() { 


     var url: URL? 
     var i = 1 
     while true { 
      url = Bundle.main.url(forResource: "test\(i)", withExtension: "png") //change test for packs 
      print("URL IS THIS: \(url)") 
      guard let url = url else { break } 

      //make it a sticker 
      let sticker = try! MSSticker(contentsOfFileURL: url, localizedDescription: "") 
      let stickerView = InstrumentedStickerView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 
      stickerView.sticker = sticker 
      stickerView.delegate = self 

      stickerViews.append(stickerView) 
      stickers.append(sticker) 

      i += 1 
     } 

    } 


func createStickerBrowser() { 
     let controller = MSStickerBrowserViewController(stickerSize: .regular) 

     addChildViewController(controller) 
     view.addSubview(controller.view) 

     controller.stickerBrowserView.backgroundColor = UIColor.white 
     controller.stickerBrowserView.dataSource = self 

     //resize this programmatically later 
     view.topAnchor.constraint(equalTo: controller.view.topAnchor).isActive = true 
     view.bottomAnchor.constraint(equalTo: controller.view.bottomAnchor).isActive = true 
     view.leftAnchor.constraint(equalTo: controller.view.leftAnchor).isActive = true 
     view.rightAnchor.constraint(equalTo: controller.view.rightAnchor).isActive = true 
    } 

あなたが見ることができるように、私はステッカーや各ステッカーのためのステッカービューの両方を作成しています - 私のステッカーはstickersアレイとステッカーに格納されていますビューにstickerViews配列。私はStickerViewに、これらのメソッドに戻り値の型を変更し、代わりに

func stickerBrowserView(_ stickerBrowserView: MSStickerBrowserView, stickerAt index: Int) -> MSStickerView { 
     return stickerViews[index] //this isnt displaying stickerveiws only stickers 
    } 

しかし、これは次のように私を取得stickerViewの配列を返す試してみました

func numberOfStickers(in stickerBrowserView: MSStickerBrowserView) -> Int { 
     return stickers.count 
    } 

    func stickerBrowserView(_ stickerBrowserView: MSStickerBrowserView, stickerAt index: Int) -> MSSticker { 
     return stickers[index] //this isnt displaying stickerveiws only stickers 
    } 

:ここ

は、ブラウザが移入され方法ですエラー:

messagesviewcontroller does not conform to protocol msstickerbrowserviewdatasource

必要な機能以前と同じように実装されていません。ステッカーの表示方法は?私は間違って何をしていますか?

答えて

0

MSStickerViewsにはMSStickerBrowserViewを追加できません。あなたのサブクラスを使用するためには、MSStickerBrowserViewのために、Appleのドキュメントごとに独自のインターフェイスを構築する必要があります:

If you need additional customizations, you must build your own user interface using MSStickerView objects.

ブラウザのビューの外観をエミュレートしたい場合は、あなただけUICollectionViewを使用して細胞を移入することができますあなたのステッカーの表示で

+0

ありがとう、どうやってuicollectionviewを構築できますか?それを経験したことはありますか?コンセプト – skyguy

+0

に新しくなったのは、テーブルビューと非常によく似ています。そこにたくさんの例があります:https://www.raywenderlich.com/136159/uicollectionview-tutorial-getting-started – BJHStudios

関連する問題