|
|
|
//
|
|
|
|
// VCEmbeder.swift
|
|
|
|
// Runner
|
|
|
|
//
|
|
|
|
// Created by Zohaib Iqbal Kambrani on 08/06/2021.
|
|
|
|
// Copyright © 2021 The Chromium Authors. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
extension UIView {
|
|
|
|
func fill(to parent: UIView, animateDuration:Double = 0.5) {
|
|
|
|
self.topAnchor.constraint(equalTo: parent.topAnchor).isActive = true
|
|
|
|
self.leadingAnchor.constraint(equalTo: parent.leadingAnchor).isActive = true
|
|
|
|
self.bottomAnchor.constraint(equalTo: parent.bottomAnchor).isActive = true
|
|
|
|
self.trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true
|
|
|
|
UIView.animate(withDuration: animateDuration) {
|
|
|
|
parent.layoutIfNeeded()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func fillToParent(animateDuration:Double = 0.5) {
|
|
|
|
if let parent = self.superview{
|
|
|
|
self.topAnchor.constraint(equalTo: parent.topAnchor).isActive = true
|
|
|
|
self.leadingAnchor.constraint(equalTo: parent.leadingAnchor).isActive = true
|
|
|
|
self.bottomAnchor.constraint(equalTo: parent.bottomAnchor).isActive = true
|
|
|
|
self.trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true
|
|
|
|
UIView.animate(withDuration: animateDuration) {
|
|
|
|
parent.layoutIfNeeded()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func fillInTo(view:UIView) {
|
|
|
|
view.addSubview(self)
|
|
|
|
fillToParent()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class ViewEmbedder {
|
|
|
|
class func embed(
|
|
|
|
parent:UIViewController,
|
|
|
|
container:UIView,
|
|
|
|
child:UIViewController,
|
|
|
|
previous:UIViewController?){
|
|
|
|
|
|
|
|
if let previous = previous {
|
|
|
|
removeFromParent(vc: previous)
|
|
|
|
}
|
|
|
|
child.willMove(toParent: parent)
|
|
|
|
parent.addChild(child)
|
|
|
|
container.addSubview(child.view)
|
|
|
|
child.didMove(toParent: parent)
|
|
|
|
let w = container.frame.size.width;
|
|
|
|
let h = container.frame.size.height;
|
|
|
|
child.view.frame = CGRect(x: 0, y: 0, width: w, height: h)
|
|
|
|
child.view.backgroundColor = UIColor.black
|
|
|
|
|
|
|
|
child.view.fill(to: container)
|
|
|
|
}
|
|
|
|
|
|
|
|
class func removeFromParent(vc:UIViewController){
|
|
|
|
vc.willMove(toParent: nil)
|
|
|
|
vc.view.removeFromSuperview()
|
|
|
|
vc.removeFromParent()
|
|
|
|
}
|
|
|
|
|
|
|
|
class func embed(withIdentifier id:String, parent:UIViewController, container:UIView, completion:((UIViewController)->Void)? = nil){
|
|
|
|
let vc = parent.storyboard!.instantiateViewController(withIdentifier: id)
|
|
|
|
embed(
|
|
|
|
parent: parent,
|
|
|
|
container: container,
|
|
|
|
child: vc,
|
|
|
|
previous: parent.children.first
|
|
|
|
)
|
|
|
|
completion?(vc)
|
|
|
|
}
|
|
|
|
}
|