You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
doctor_app_flutter/ios/Runner/VCEmbeder.swift

79 lines
2.6 KiB
Swift

//
// 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)
}
}