-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathPresentationController.swift
More file actions
70 lines (54 loc) · 2.28 KB
/
PresentationController.swift
File metadata and controls
70 lines (54 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//
// PresentationController.swift
// Example
//
// Created by Hirohisa Kawasaki on 5/26/15.
// Copyright (c) 2015 Hirohisa Kawasaki. All rights reserved.
//
import UIKit
class PresentationController: UIPresentationController {
let overlay: UIView = {
let view = UIView(frame: CGRectZero)
view.backgroundColor = UIColor.blackColor()
return view
}()
override init(presentedViewController: UIViewController, presentingViewController: UIViewController) {
super.init(presentedViewController: presentedViewController, presentingViewController: presentingViewController)
overlay.gestureRecognizers = [UITapGestureRecognizer(target: self, action: "overlayDidTouch:")]
}
override func presentationTransitionWillBegin() {
overlay.frame = containerView!.bounds
overlay.alpha = 0.0
containerView!.insertSubview(overlay, atIndex: 0)
presentedViewController.transitionCoordinator()?.animateAlongsideTransition({ _ in
self.overlay.alpha = 0.5
}, completion: nil)
}
override func dismissalTransitionWillBegin() {
presentedViewController.transitionCoordinator()?.animateAlongsideTransition({ _ in
self.overlay.alpha = 0.0
}, completion: nil)
}
override func dismissalTransitionDidEnd(completed: Bool) {
if completed {
overlay.removeFromSuperview()
}
}
override func sizeForChildContentContainer(container: UIContentContainer, withParentContainerSize parentSize: CGSize) -> CGSize {
return CGSize(width: parentSize.width / 2, height: parentSize.height)
}
override func frameOfPresentedViewInContainerView() -> CGRect {
let origin = CGPoint(x: 0, y: 0)
let size = sizeForChildContentContainer(presentedViewController, withParentContainerSize: containerView!.bounds.size)
return CGRect(origin: origin, size: size)
}
override func containerViewWillLayoutSubviews() {
overlay.frame = containerView!.bounds
presentedView()?.frame = frameOfPresentedViewInContainerView()
}
override func containerViewDidLayoutSubviews() {
}
func overlayDidTouch(sender: AnyObject) {
presentedViewController.dismissViewControllerAnimated(true, completion: nil)
}
}