我希望我的视图控制器具有相互通信的自定义UIView的相同组合

时间:2017-04-28 09:41:30

标签: ios swift xcode uiview

我希望我的几个视图控制器底部有一个播放器。该播放器包含2个视图:播放器和切换它的按钮(可以隐藏或扩展)。

Expanded version

Hidden

现在我在每个视图控制器中使用以下代码添加此播放器。

@IBOutlet weak var broadcastView: BroadcastView!
@IBOutlet weak var broadcastViewBottomConstraint: NSLayoutConstraint!
@IBOutlet weak var avatarImageView: UIImageView!

@IBAction func toggleBroadcastMode(_ sender: ToggleBroadcastButton) {
    if sender.isExpanded {
        broadcastViewBottomConstraint.hideBroadcastView()
    } else {
        broadcastViewBottomConstraint.expandBroadcastView()
    }
    animateBroadcastToggle()

    sender.toggle()
    broadcastView.toggleBroadcastView()
}

有没有办法不反复复制代码?也许我可以创建父VC或View来做到这一点?如果是这样,那怎么样?

2 个答案:

答案 0 :(得分:1)

我个人会将UINavigationController子类化并将其放在那里,这样你就可以在玩家保持良好的底部时浏览流程,如果你需要一个VC与之交互,那么你可以

if let nav = navigationController as? MyPlayerNavController {
    nav.PlayThis()
}

你可以让它改变大小,从那里你可以在转换过程中失去它,在播放音乐时就像音乐应用程序一样。

答案 1 :(得分:0)

将其添加为keyWindow的子视图。这样它将始终保留在所有viewControllers中。

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    var overlayViewFrame = UIScreen.main.bounds
    overlayViewFrame.origin.y = overlayViewFrame.height - 200
    overlayViewFrame.size.height = 200
    let overlayView = UIView(frame:overlayViewFrame)
    overlayView.backgroundColor = UIColor.cyan
    UIApplication.shared.keyWindow?.addSubview(overlayView)
}

此代码是示例通用代码。如果您希望某些VC不显示此信息,请将此叠加视图保留为单例,并隐藏在适当的VC中。

输出截图: enter image description here enter image description here