ToastCenter.swift
1.47 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
71
72
73
74
75
/*
* ToastCenter.swift
*
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
* Version 2, December 2004
*
* Copyright (C) 2013-2015 Su Yeol Jeon
*
* Everyone is permitted to copy and distribute verbatim or modified
* copies of this license document, and changing it is allowed as long
* as the name is changed.
*
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
* TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
*
* 0. You just DO WHAT THE FUCK YOU WANT TO.
*
*/
import UIKit
open class ToastCenter {
// MARK: Properties
private let queue: OperationQueue = {
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 1
return queue
}()
open var currentToast: Toast? {
return self.queue.operations.first as? Toast
}
open static let `default` = ToastCenter()
// MARK: Initializing
init() {
NotificationCenter.default.addObserver(
self,
selector: #selector(self.deviceOrientationDidChange),
name: .UIDeviceOrientationDidChange,
object: nil
)
}
// MARK: Adding Toasts
open func add(_ toast: Toast) {
self.queue.addOperation(toast)
}
// MARK: Cancelling Toasts
open func cancelAll() {
for toast in self.queue.operations {
toast.cancel()
}
}
// MARK: Notifications
dynamic func deviceOrientationDidChange() {
if let lastToast = self.queue.operations.first as? Toast {
lastToast.view.setNeedsLayout()
}
}
}