我还没有在其他任何地方看到过这个主题——我已经构建了一个 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)
}
然后添加贴纸视图并开始在单独的单元格类中制作动画。