@@ -2,7 +2,10 @@ import UIKit
2
2
3
3
public class PentominoesViewController : UIViewController {
4
4
5
- private let gridSize : CGFloat = 30
5
+ @IBOutlet var tap : UITapGestureRecognizer !
6
+ @IBOutlet var pan : UIPanGestureRecognizer !
7
+
8
+ private let gridSize : CGFloat = 35
6
9
var boardView : BoardView !
7
10
var tileViews : [ TileView ] !
8
11
public var board : Board ! {
@@ -48,4 +51,60 @@ public class PentominoesViewController: UIViewController {
48
51
49
52
}
50
53
}
54
+
55
+ var activeTile : TileView ? {
56
+ willSet {
57
+ if let oldActiveTile = activeTile {
58
+ oldActiveTile. lifted = false
59
+ oldActiveTile. layer. zPosition = 0
60
+ }
61
+ }
62
+ didSet {
63
+ if let newActiveTile = activeTile {
64
+ newActiveTile. lifted = true
65
+ newActiveTile. layer. zPosition = 10
66
+ }
67
+ }
68
+ }
69
+
70
+ @IBAction func handleTap( sender: UITapGestureRecognizer ) {
71
+ activeTile? . rotate ( true )
72
+ }
73
+
74
+ @IBAction func handlePan( sender: UIPanGestureRecognizer ) {
75
+ var fingerClearedLocation = sender. locationInView ( view)
76
+ fingerClearedLocation. y -= ( activeTile? . bounds. height ?? 0.0 ) * 0.5
77
+ switch sender. state {
78
+ case . Began:
79
+ UIView . animateWithDuration ( 0.1 ) { self . activeTile? . center = fingerClearedLocation }
80
+ case . Changed:
81
+ activeTile? . center = fingerClearedLocation
82
+ case . Ended, . Cancelled:
83
+ // TODO: put it down in a permissible place
84
+ activeTile = nil
85
+ default :
86
+ break
87
+ }
88
+ }
89
+
90
+
91
+
92
+ }
93
+
94
+ extension PentominoesViewController : UIGestureRecognizerDelegate {
95
+ public func gestureRecognizer( gestureRecognizer: UIGestureRecognizer , shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer ) -> Bool {
96
+ return true
97
+ }
98
+
99
+ public func gestureRecognizerShouldBegin( gestureRecognizer: UIGestureRecognizer ) -> Bool {
100
+ if gestureRecognizer != pan {
101
+ return true
102
+ }
103
+ let location = gestureRecognizer. locationInView ( view)
104
+ if let hitTile = view. hitTest ( location, withEvent: nil ) as? TileView {
105
+ activeTile = hitTile
106
+ return true
107
+ }
108
+ return false
109
+ }
51
110
}
0 commit comments