2

我还没有在其他任何地方看到过这个主题——我已经构建了一个 iMessage 应用程序,它使用一个 collecitonview 来保存一堆 MSStickerViews。这些贴纸是动画的。

我的问题是,虽然应用程序本身似乎在您第一次打开时加载,但在用户能够触摸贴纸/与应用程序交互之前以及 MSStickers 开始动画之前存在明显的延迟。我不确定这是否与调用函数的顺序有关,但我找不到改进/修复此问题的方法。

我的 MSStickers 被添加到集合视图单元格中:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        // get a reference to our storyboard cell
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "stickerCell", for: indexPath as IndexPath) as! StickerCollectionViewCell

然后在一个单独的 Cell 类中添加贴纸视图并将其设置为.startAnimating().

延迟约为 5-6 秒。我怎样才能减少这种情况?这可能吗?

动画/贴纸代码:

 for (animal, atlas) in animalsAnim {
            animalsAnim[animal] = getImagesForAnimals(animal: animal, allSticks: allStickers)
            addSticker(images: animalsAnim[animal]!, name: animal)
        }

func addSticker(images: [UIImage], name: String)
    {
        let sticker: MSSticker
        do {
            try sticker=MSSticker(images: images, format: .apng, frameDelay: 0.95/14.0, numberOfLoops: 0, localizedDescription: name)
        }catch MSStickerAnimationInputError.InvalidDimensions {
            fatalError("ERROR: Dimens")
        }catch MSStickerAnimationInputError.InvalidStickerFileSize {
           fatalError("ERROR: Size")
        } catch { fatalError("other error:\(error)") }

        var stickerSize = CGSize()

        if (UIDevice.current.iPhone5orBefore)
        {

            stickerSize = CGSize(width: view.bounds.width*0.38, height: view.bounds.width*0.38)
        }
        else {
            stickerSize = CGSize(width: view.bounds.width*0.4, height: view.bounds.width*0.4)
        }

        let stickerView = InstrumentedStickerView(frame: CGRect(origin: CGPoint(x: 0,y :0), size: stickerSize))

        stickerView.sticker = sticker
        stickerView.delegate = self

        stickerPack.append(stickerView)
    }

然后添加贴纸视图并开始在单独的单元格类中制作动画。

4

0 回答 0