与具有多个子ViewControllers一个交互的ViewController

问题描述 投票:0回答:2

我有一个父的viewController和孩子的viewController。该childViewController像类似苹果公司的股票或地图应用卡和功能。我可以展开或折叠,并与其中的按钮交互。唯一的问题是,我不能与父母的viewController中的任何按钮互动。任何人都知道出了什么问题。

enter image description here

class BaseViewController: UIViewController {

enum CardState {
    case expanded
    case collapsed
}

var cardViewController: CardViewController!
var visualEffectView: UIVisualEffectView!

lazy var deviceCardHeight: CGFloat = view.frame.height - (view.frame.height / 6)
lazy var cardHeight: CGFloat = deviceCardHeight
let cardHandleAreaHeight: CGFloat = 65

var cardVisible = false
var nextState: CardState {
    return cardVisible ? .collapsed : .expanded
}

override func viewDidLoad() {
    super.viewDidLoad()
    setupCard() 
}

@IBAction func expandCard(_ sender: Any) {
    print("Button Pressed")
}
func setupCard() {

    cardViewController = CardViewController(nibName: "CardViewController", bundle: nil)
    self.addChild(cardViewController)
    self.view.addSubview(cardViewController.view)

    //Set up frame of cardView
    cardViewController.view.frame = CGRect(x: 0, y: view.frame.height - cardHandleAreaHeight, width: view.frame.width, height: cardHeight)

    cardViewController.view.clipsToBounds = true

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleCardTap(recognizer:)))
         cardViewController.handleArea.addGestureRecognizer(tapGestureRecognizer)

}

@objc func handleCardTap(recognizer: UITapGestureRecognizer) {
    switch recognizer.state {
    case .ended:
        animationTransitionIfNeeded(state: nextState, duration: 0.9)
    default:
        break
    }
}

 func animationTransitionIfNeeded(state: CardState, duration: TimeInterval) {
    if runningAnimations.isEmpty {
        let frameAnimator = UIViewPropertyAnimator(duration: duration, dampingRatio: 1) {
            switch state {
            case .expanded:
                self.cardViewController.view.frame.origin.y = self.view.frame.height - self.cardHeight
            case .collapsed:
                self.cardViewController.view.frame.origin.y = self.view.frame.height - self.cardHandleAreaHeight
            }
        }

        frameAnimator.addCompletion { _ in
            //if true set to false, if false set to true
            self.cardVisible = !self.cardVisible
            self.runningAnimations.removeAll()
        }

        frameAnimator.startAnimation()
        runningAnimations.append(frameAnimator)

        let cornerRadiusAnimator = UIViewPropertyAnimator(duration: duration, curve: .linear) {
            switch state {
            case .expanded:
                self.cardViewController.view.layer.cornerRadius = 12
            case .collapsed:
                self.cardViewController.view.layer.cornerRadius = 0
            }
        }

        cornerRadiusAnimator.startAnimation()
        }
     }
ios uiviewcontroller
2个回答
1
投票

“不能相互作用”应意味着你不能按下。如果这是最有可能的原因是按钮覆盖东西的情况下(可以是透明的测试,有,直到你解决这个没有透明背景时这样保证)。另一个可能的原因是,你已经设置,将导致此行为的按钮的某些属性,但你可能会知道,所以它几乎可以肯定是前者。


0
投票

我解决这个问题。此代码应该很好地工作。为什么以前没有的原因是因为我在visualEffectView增加。它涵盖了父母。

© www.soinside.com 2019 - 2024. All rights reserved.