2016-09-29 4 views
0

좋아, 모두들 스위프트에있는 MS 스티커에 새로운 사람이지만 mssticker와 msstickerview의 차이점을 알아 내려고합니다. 여기서 https://developer.apple.com/reference/messages/msstickerview/1648434-sticker API를 읽었으나 상대적으로 간단한 문제에 대한 답변을 찾을 수 없습니다. MSStickerBrowserView에만 표시 할 수있는 MSStickers (표시 할 수 없음)를 추가 할 수있는 것 같습니다. 그러나 구현하려고하는 사용자 정의 스티커보기 클래스가 있으므로 StickerVIEWS를 추가해야합니다.신속하게 브라우저보기에 스티커보기를 추가하는 방법은 무엇입니까?

내 스티커가 여기 내 브라우저보기에 추가됩니다

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

필요한 기능 n은 이전과 같이 구현되지 않습니다. 하나는 스티커보기를 어떻게 표시합니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

MSStickerViewsMSStickerBrowserView을 추가 할 수 없습니다. 하위 클래스를 사용하려면 MSStickerBrowserView 애플의 설명서에 따라 자신 만의 인터페이스를 구축해야합니다 :

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