【问题标题】:How to block the selection of a sticker in iMessage如何阻止在 iMessage 中选择贴纸
【发布时间】:2017-12-05 08:50:57
【问题描述】:

我正在尝试制作一个非常简单的贴纸 iMessage 应用程序,当用户点击一些贴纸时,他们会被建议进行应用内购买。

我有一个自定义视图控制器,它实现了UIViewControllerUICollectionViewDelegateUICollectionViewDataSource(来源:https://github.com/jelenakrmar/customStickerApp)。

我现在尝试覆盖用户点击或剥离贴纸时的默认行为。

我的第一次尝试是在collectionView的级别

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// open the in-app purchase window
}

但它不起作用

也许我需要扩展 MSStickerView 并在 'didTap' 和 'didLongPress' 中做一些事情。

有没有人在选择贴纸时覆盖 iMessage 的行为?

【问题讨论】:

    标签: ios imessage msstickerview


    【解决方案1】:

    我处于类似情况,并且有一个 UICollectionController 通过我的 UICollectionViewCell 中的 MSStickerView 加载贴纸。

    我将 UICollectionViewCell 子类化,并将 MSStickerView 放置到单元格 contentView 上。在此之后,我通过以下方式禁用了触摸:

    (stickerView)?.isUserInteractionEnabled = false
    

    collectionViewController 函数didSelectItemAt 现在可以工作了。

    【讨论】:

      【解决方案2】:

      看起来,如果您的UICollectionViewCell 有一个MSStickerView(或可能导入Messages 框架),则didSelectItemAt 委托不会被调用。

      例如,如果我想要一个带有免费和锁定贴纸的贴纸扩展,我会在我的UICollectionView 中创建两个不同的单元格。一个有MSStickerView,第二个只有UIImageView。如果点击了免费的贴纸,iOS 会在 UICollectionView 委托未被触发的情况下处理所有事情。但是,如果用户点击锁定的贴纸,代理就会触发,并且可以由didSelectItemAt 代理处理。

      我还没有找到任何指向这一点的文档。

      【讨论】:

      • 是的,我得出了相同的结论:您需要 2 种不同类型的单元格,一种带有 MSStickerView,另一种带有其他东西(例如 UIImageView)。问题是您无法在 UIImageView 中为 apng 设置动画。我试图为此使用第三方库,但它破坏了性能并且应用程序被拒绝了。我最终使用了 UIImageView,这当然不理想(用户在购买之前看不到动画贴纸的运行)。我将您的答案标记为真实。
      猜你喜欢
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2017-04-19
      • 2013-09-20
      • 2016-11-21
      相关资源
      最近更新 更多