我创建了一个自定义类,在其中获得了parentViewController
和cardViewController
。然后我在blackView
上添加了keyWindow
(带有0.4 alpha),并在keyWindow
上添加了cardViewController.view.
事实是它最初显示,但是交互/滑动手势在名片视图上不起作用。
这里是代码:
window = UIApplication.shared.keyWindow!
blackView.backgroundColor = UIColor.black
blackView.alpha = 0.4
window.addSubview(blackView)
blackView.frame = window.frame
blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTapRecognizer)))
window.addSubview(cardViewController.view)
card.translatesAutoresizingMaskIntoConstraints = false
cardHeightConstraint = card.bottomAnchor.constraint(equalTo: window.bottomAnchor, constant: containerView.bounds.height - (self.headerHeight ?? 0))
card.leadingAnchor.constraint(equalTo: window.leadingAnchor).isActive = true
card.trailingAnchor.constraint(equalTo: window.trailingAnchor).isActive = true
card.heightAnchor.constraint(equalToConstant: containerView.bounds.height).isActive = true
cardHeightConstraint.isActive = true
以上代码在类的初始化中被调用。我看到的是:
如果我不添加blackView,并且不执行与UIWindow相关的任何操作,而只是简单地将cardViewController作为子级添加到parentViewController,则所有动画和名片手势均应正常工作。仅当将卡添加到UIWindow时,卡视图上的动画和滑动手势才起作用。
我该怎么办?帮助将不胜感激。 (使用Xcode 11,iOS 13 +)
除非您要在其上设置初始RootViewController,否则您不应将UIWindow用于其他任何事情,除非您创建的应用程序具有对其他屏幕的某些外部投影。
[如果您尝试在XCode 11之前的AppDelegate.swift中使用程序化方法,则仅应设置UIWindows。>
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. window = UIWindow(frame: UIScreen.main.bounds) window?.makeKeyAndVisible() window?.rootViewController = TabBarViewController() return true }
尚不清楚您要使用CardViewController实现的目标。但是,如果您已经创建了一个自定义View,则应该继承UIView而不是UIViewController,然后在相应的viewController中使用
view.addSubview(yourCustomUIView)
。如果您可以编辑您的问题,您到底想达到什么目的并显示更多代码。我们可以提供更好的帮助。您是否从AppDelegate中包含了代码?