Ios 如何创建什么样的应用程序预览动画?

Ios 如何创建什么样的应用程序预览动画?,ios,swift,Ios,Swift,我想知道如何制作像WhatsApp这样的预览,这是演示: 似乎它不是偷看和弹出,因为我们只需要做长按,然后它就会显示出来 注意:如果您没有安装WhatsApp,您可以在本机iOS消息应用程序上进行测试,它们具有相同的动画 感谢这是支持iOS13以后版本的UIContextMenuConfiguration 长按tableViewCell可以看到预览和菜单。可以将任何viewController或任何customView显示为菜单的预览组件 我已将viewController显示为预览 // Ma

我想知道如何制作像WhatsApp这样的预览,这是演示:

似乎它不是偷看和弹出,因为我们只需要做长按,然后它就会显示出来

注意:如果您没有安装WhatsApp,您可以在本机iOS消息应用程序上进行测试,它们具有相同的动画

感谢

这是支持iOS13以后版本的UIContextMenuConfiguration

长按tableViewCell可以看到预览和菜单。可以将任何viewController或任何customView显示为菜单的预览组件

我已将viewController显示为预览

// MainViewController is first ViewController and DetailsViewController is second ViewController
class MainViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var castNameArr = ["Professor", "Berlin", "Nairobi", "Tokiyo", "Rio", "Denver", "Mosco", "Requel", "Helsinki", "Arturo"]
    var selectedCast = ""
    var detailVc = DetailsViewController()

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "Money Heist Casts"
        detailVc = self.storyboard?.instantiateViewController(withIdentifier: "DetailsViewController") as! DetailsViewController
        }
}
使用tableView的ContextMenuConfiguration for Rowat方法,我们可以创建菜单和预览

  func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
        selectedCast = castNameArr[indexPath.row]
        let identifier = "\(indexPath.row)" as NSString

        return UIContextMenuConfiguration(
            identifier: identifier,
            previewProvider: makePreview) { _ in

                let optionOne = UIAction(
                    title: "Option 1",
                    image: UIImage(systemName: "arrowshape.turn.up.right")){ _ in
                        //This will get called when you tap on Option 1
                }

                let optionTwo = UIAction(
                    title: "Option 2",
                    image: UIImage(systemName: "book.fill")){ _ in
                        //This will get called when you tap on Option 2
                }

                return UIMenu(title: "", image: nil, children: [optionOne, optionTwo])
        }
    }

// This will return a viewController which we want to display as preview
    func makePreview() -> UIViewController {
        detailVc.castNameStr = selectedCast
        return detailVc
    }
当交互即将提交以响应用户点击预览时,将调用使用WillPerformReviewActionFormEnuWith方法

func tableView(_ tableView: UITableView, willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionCommitAnimating) {
    DispatchQueue.main.async {
        print(configuration.identifier as? String)
        self.navigationController?.pushViewController(self.detailVc, animated: true)
    }
}
这是显示为预览的DetailsViewController

class DetailsViewController: UIViewController {

    @IBOutlet weak var titleLbl: UILabel!
    @IBOutlet weak var castImgView: UIImageView!
    var castNameStr = ""
    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func viewWillAppear(_ animated: Bool) {
        titleLbl.text = "This is \(castNameStr)"
        castImgView.image = UIImage(named: castNameStr)
    }
从下载演示

有关更多详细信息,请查看此处


这叫做UIContextMenuConfiguration。谢谢,这正是我的意思。我只是不知道该怎么称呼它:-DGreat,谢谢你提供了一个非常详细和正确的答案:-Dcan u仔细检查我的问题:,谢谢