Skip to content

Instantly share code, notes, and snippets.

View alfian0's full-sized avatar
🎯
Focusing

Muhammad Alfiansyah alfian0

🎯
Focusing
View GitHub Profile
class MainController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
present(DetailController(), animated: true, completion: nil)
}
}
class DetailController: UIViewController {
let transition = MenuTransition()
init() {
super.init(nibName: "DetailController", bundle: nil)
modalPresentationStyle = .custom
transitioningDelegate = transition
}
class Interactor: UIPercentDrivenInteractiveTransition {
var hasStarted = false
var shouldFinish = false
}
extension MenuTransition: UIViewControllerTransitioningDelegate {
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
state = .present
return self
}
func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
state = .dismiss
return self
}
enum TransitionState {
case present
case dismiss
}
class MenuTransition: NSObject, UIViewControllerAnimatedTransitioning {
private var state: TransitionState = .present
let interactor = Interactor()
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
import UIKit
class PresentationController: UIPresentationController {
private var chrome: UIView = UIView()
var interactor: Interactor? = nil
override var frameOfPresentedViewInContainerView: CGRect {
guard let containerView = containerView,
let presentedView = presentedView else { return .zero }
@alfian0
alfian0 / CustomPresentation.swift
Last active June 24, 2020 08:03
Custom Transition
class CustomPresentation: UIPresentationController {
override var frameOfPresentedViewInContainerView: CGRect {
return CGRect(x: 0, y: containerView!.bounds.height / 2, width: containerView!.bounds.width, height: containerView!.bounds.height / 2)
}
override func containerViewWillLayoutSubviews() {
presentedView?.center = .zero
presentedView?.frame = frameOfPresentedViewInContainerView
}
}
@alfian0
alfian0 / KVO.playground
Created February 3, 2020 09:31
KVO implementation swift
import Foundation
class User: NSObject {
@objc dynamic var name: String?
init(with name: String) {
super.init()
self.name = name
}
protocol EndPointType {
var baseURL: URL { get }
var path: String { get }
var parameters: [String:Any]? { get }
var httpMethod: HTTPMethod { get }
var task: HTTPTask { get }
var header: [String:String]? { get }
}
private func generateBoundary() -> String {
return "Boundary-\(UUID().uuidString)"
}
private func createDataBody(withParamaeters parameters: Parameters?, media: [Media]?, boundary: String) -> Data {
var body = Data()
let linebreak = "\r\n"
if let parameters = parameters {
for (key, value) in parameters {
body.append("--\(boundary + linebreak)")