Skip to content

Commit aa82db6

Browse files
Code cleanup and minor improvements
1 parent 4a96e8e commit aa82db6

File tree

3 files changed

+45
-91
lines changed

3 files changed

+45
-91
lines changed

Demo/DatePickerDialogExample.xcodeproj/project.pbxproj

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
children = (
6666
81EC6C831A1EADF7009440DB /* ViewController.swift */,
6767
81EC6C851A1EADF7009440DB /* Main.storyboard */,
68-
81EC6CA61A1EB12B009440DB /* DatePickerDialog */,
6968
81EC6CA11A1EAE0D009440DB /* App */,
7069
);
7170
name = DatePickerDialog;
@@ -90,13 +89,6 @@
9089
name = App;
9190
sourceTree = "<group>";
9291
};
93-
81EC6CA61A1EB12B009440DB /* DatePickerDialog */ = {
94-
isa = PBXGroup;
95-
children = (
96-
);
97-
name = DatePickerDialog;
98-
sourceTree = "<group>";
99-
};
10092
/* End PBXGroup section */
10193

10294
/* Begin PBXNativeTarget section */

Demo/Library/DatePickerDialog.swift

Lines changed: 45 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,105 +1,84 @@
1-
//
2-
// DatePicker.swift
3-
41
import Foundation
52
import UIKit
63
import QuartzCore
74

85

96
class DatePickerDialog: UIView {
107

8+
typealias DatePickerCallback = (date: NSDate) -> Void
9+
1110
/* Consts */
12-
private let kDatePickerDialogDefaultButtonHeight: CGFloat = 50
11+
private let kDatePickerDialogDefaultButtonHeight: CGFloat = 50
1312
private let kDatePickerDialogDefaultButtonSpacerHeight: CGFloat = 1
14-
private let kDatePickerDialogCornerRadius: CGFloat = 7
15-
private let kDatePickerDialogCancelButtonTag: Int = 1
16-
private let kDatePickerDialogDoneButtonTag: Int = 2
13+
private let kDatePickerDialogCornerRadius: CGFloat = 7
14+
private let kDatePickerDialogDoneButtonTag: Int = 1
1715

1816
/* Views */
19-
private var dialogView: UIView!
20-
private var titleLabel: UILabel!
21-
private var datePicker: UIDatePicker!
17+
private var dialogView: UIView!
18+
private var titleLabel: UILabel!
19+
private var datePicker: UIDatePicker!
2220
private var cancelButton: UIButton!
23-
private var doneButton: UIButton!
21+
private var doneButton: UIButton!
2422

2523
/* Vars */
26-
private var title: String!
27-
private var doneButtonTitle: String!
28-
private var cancelButtonTitle: String!
29-
private var defaultDate: NSDate!
30-
private var datePickerMode: UIDatePickerMode!
31-
private var callback: ((date: NSDate) -> Void)!
24+
private var defaultDate: NSDate?
25+
private var datePickerMode: UIDatePickerMode?
26+
private var callback: DatePickerCallback?
3227

3328

3429
/* Overrides */
3530
init() {
3631
super.init(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height))
3732

38-
NSNotificationCenter.defaultCenter().addObserver(self, selector: "deviceOrientationDidChange:", name: UIDeviceOrientationDidChangeNotification, object: nil)
33+
setupView()
3934
}
4035

4136
required init(coder aDecoder: NSCoder) {
4237
fatalError("init(coder:) has not been implemented")
4338
}
4439

45-
/* Handle device orientation changes */
46-
func deviceOrientationDidChange(notification: NSNotification) {
47-
/* TODO */
40+
deinit {
41+
NSNotificationCenter.defaultCenter().removeObserver(self)
4842
}
4943

50-
/* Create the dialog view, and animate opening the dialog */
51-
func show(title: String, datePickerMode: UIDatePickerMode = .DateAndTime, callback: ((date: NSDate) -> Void)) {
52-
show(title, doneButtonTitle: "Done", cancelButtonTitle: "Cancel", datePickerMode: datePickerMode, callback: callback)
53-
}
54-
55-
func show(title: String, doneButtonTitle: String, cancelButtonTitle: String, defaultDate: NSDate = NSDate(), datePickerMode: UIDatePickerMode = .DateAndTime, callback: ((date: NSDate) -> Void)) {
56-
self.title = title
57-
self.doneButtonTitle = doneButtonTitle
58-
self.cancelButtonTitle = cancelButtonTitle
59-
self.datePickerMode = datePickerMode
60-
self.callback = callback
61-
self.defaultDate = defaultDate
62-
44+
func setupView() {
6345
self.dialogView = createContainerView()
64-
46+
6547
self.dialogView!.layer.shouldRasterize = true
6648
self.dialogView!.layer.rasterizationScale = UIScreen.mainScreen().scale
67-
49+
6850
self.layer.shouldRasterize = true
6951
self.layer.rasterizationScale = UIScreen.mainScreen().scale
70-
52+
7153
self.dialogView!.layer.opacity = 0.5
7254
self.dialogView!.layer.transform = CATransform3DMakeScale(1.3, 1.3, 1)
73-
55+
7456
self.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0)
75-
57+
7658
self.addSubview(self.dialogView!)
7759

78-
/* Attached to the top most window (make sure we are using the right orientation) */
79-
let interfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
80-
81-
switch(interfaceOrientation) {
82-
case UIInterfaceOrientation.LandscapeLeft:
83-
let t: Double = M_PI * 270 / 180
84-
self.transform = CGAffineTransformMakeRotation(CGFloat(t))
85-
break
86-
87-
case UIInterfaceOrientation.LandscapeRight:
88-
let t: Double = M_PI * 90 / 180
89-
self.transform = CGAffineTransformMakeRotation(CGFloat(t))
90-
break
91-
92-
case UIInterfaceOrientation.PortraitUpsideDown:
93-
let t: Double = M_PI * 180 / 180
94-
self.transform = CGAffineTransformMakeRotation(CGFloat(t))
95-
break
96-
97-
default:
98-
break
99-
}
100-
101-
self.frame = CGRectMake(0, 0, self.frame.width, self.frame.size.height)
10260
UIApplication.sharedApplication().windows.first!.addSubview(self)
61+
}
62+
63+
/* Handle device orientation changes */
64+
func deviceOrientationDidChange(notification: NSNotification) {
65+
/* TODO */
66+
}
67+
68+
/* Create the dialog view, and animate opening the dialog */
69+
func show(title: String, datePickerMode: UIDatePickerMode = .DateAndTime, callback: DatePickerCallback) {
70+
show(title, doneButtonTitle: "Done", cancelButtonTitle: "Cancel", datePickerMode: datePickerMode, callback: callback)
71+
}
72+
73+
func show(title: String, doneButtonTitle: String, cancelButtonTitle: String, defaultDate: NSDate = NSDate(), datePickerMode: UIDatePickerMode = .DateAndTime, callback: DatePickerCallback) {
74+
self.titleLabel.text = title
75+
self.doneButton.setTitle(doneButtonTitle, forState: .Normal)
76+
self.cancelButton.setTitle(cancelButtonTitle, forState: .Normal)
77+
self.datePickerMode = datePickerMode
78+
self.callback = callback
79+
self.defaultDate = defaultDate
80+
self.datePicker.datePickerMode = self.datePickerMode ?? .Date
81+
self.datePicker.date = self.defaultDate ?? NSDate()
10382

10483
/* Anim */
10584
UIView.animateWithDuration(
@@ -187,14 +166,11 @@ class DatePickerDialog: UIView {
187166
self.titleLabel = UILabel(frame: CGRectMake(10, 10, 280, 30))
188167
self.titleLabel.textAlignment = NSTextAlignment.Center
189168
self.titleLabel.font = UIFont.boldSystemFontOfSize(17)
190-
self.titleLabel.text = self.title
191169
dialogContainer.addSubview(self.titleLabel)
192170

193171
self.datePicker = UIDatePicker(frame: CGRectMake(0, 30, 0, 0))
194172
self.datePicker.autoresizingMask = UIViewAutoresizing.FlexibleRightMargin
195173
self.datePicker.frame.size.width = 300
196-
self.datePicker.datePickerMode = self.datePickerMode
197-
self.datePicker.date = self.defaultDate
198174
dialogContainer.addSubview(self.datePicker)
199175

200176
// Add the buttons
@@ -214,13 +190,10 @@ class DatePickerDialog: UIView {
214190
buttonWidth,
215191
kDatePickerDialogDefaultButtonHeight
216192
)
217-
self.cancelButton.tag = kDatePickerDialogCancelButtonTag
218-
self.cancelButton.setTitle(self.cancelButtonTitle, forState: UIControlState.Normal)
219193
self.cancelButton.setTitleColor(UIColor(red: 0, green: 0.5, blue: 1, alpha: 1), forState: UIControlState.Normal)
220194
self.cancelButton.setTitleColor(UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 0.5), forState: UIControlState.Highlighted)
221195
self.cancelButton.titleLabel!.font = UIFont.boldSystemFontOfSize(14)
222196
self.cancelButton.layer.cornerRadius = kDatePickerDialogCornerRadius
223-
self.cancelButton.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside)
224197
container.addSubview(self.cancelButton)
225198

226199
self.doneButton = UIButton(type: UIButtonType.Custom) as UIButton
@@ -231,7 +204,6 @@ class DatePickerDialog: UIView {
231204
kDatePickerDialogDefaultButtonHeight
232205
)
233206
self.doneButton.tag = kDatePickerDialogDoneButtonTag
234-
self.doneButton.setTitle(self.doneButtonTitle, forState: UIControlState.Normal)
235207
self.doneButton.setTitleColor(UIColor(red: 0, green: 0.5, blue: 1, alpha: 1), forState: UIControlState.Normal)
236208
self.doneButton.setTitleColor(UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 0.5), forState: UIControlState.Highlighted)
237209
self.doneButton.titleLabel!.font = UIFont.boldSystemFontOfSize(14)
@@ -242,26 +214,16 @@ class DatePickerDialog: UIView {
242214

243215
func buttonTapped(sender: UIButton!) {
244216
if sender.tag == kDatePickerDialogDoneButtonTag {
245-
self.callback(date: self.datePicker.date)
246-
} else if sender.tag == kDatePickerDialogCancelButtonTag {
247-
//There's nothing do to here \o\
217+
self.callback?(date: self.datePicker.date)
248218
}
249219

250220
close()
251221
}
252222

253223
/* Helper function: count and return the screen's size */
254224
func countScreenSize() -> CGSize {
255-
var screenWidth = UIScreen.mainScreen().bounds.size.width
256-
var screenHeight = UIScreen.mainScreen().bounds.size.height
257-
258-
let interfaceOrientaion = UIApplication.sharedApplication().statusBarOrientation
259-
260-
if UIInterfaceOrientationIsLandscape(interfaceOrientaion) {
261-
let tmp = screenWidth
262-
screenWidth = screenHeight
263-
screenHeight = tmp
264-
}
225+
let screenWidth = UIScreen.mainScreen().bounds.size.width
226+
let screenHeight = UIScreen.mainScreen().bounds.size.height
265227

266228
return CGSizeMake(screenWidth, screenHeight)
267229
}

0 commit comments

Comments
 (0)