@@ -2,7 +2,10 @@ import UIKit
22
33public class PentominoesViewController : UIViewController {
44
5- private let gridSize : CGFloat = 30
5+ @IBOutlet var tap : UITapGestureRecognizer !
6+ @IBOutlet var pan : UIPanGestureRecognizer !
7+
8+ private let gridSize : CGFloat = 35
69 var boardView : BoardView !
710 var tileViews : [ TileView ] !
811 public var board : Board ! {
@@ -48,4 +51,60 @@ public class PentominoesViewController: UIViewController {
4851
4952 }
5053 }
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+ }
51110}
0 commit comments