diff --git a/Classes/BWGestureTrackView.h b/Classes/BWGestureTrackView.h index 56e0dad..b4179a0 100644 --- a/Classes/BWGestureTrackView.h +++ b/Classes/BWGestureTrackView.h @@ -10,6 +10,9 @@ - (void) removeAllRecognizers; - (void) trackGestureRecognizer: (UIGestureRecognizer *) gestureRecognizer; +// The recognizer's action was triggered. Make a note of it. +- (void) recordActionForGestureRecognizer: (UIGestureRecognizer *) gestureRecognizer; + - (void) startRecording; - (void) stopRecording; diff --git a/Classes/BWGestureTrackView.m b/Classes/BWGestureTrackView.m index 6d150f2..5c65595 100644 --- a/Classes/BWGestureTrackView.m +++ b/Classes/BWGestureTrackView.m @@ -9,6 +9,12 @@ static const CGFloat kRecognizerHeight = 30.0; static const CGFloat kLabelWidth = 200; static const CGFloat kLabelTextSize = 15.0; +static const CGFloat kActionChevronSize = 6.0; + +// Synthetic states for the recognizer tracking +enum { + kActionTriggered = UIGestureRecognizerStateFailed + 2000 +}; static const char *g_stateNames[] = { @@ -50,7 +56,7 @@ @interface BWGestureThing : NSObject @property (nonatomic, assign) NSTimeInterval timestamp; // absolute time + (id) thingFromGesture: (UIGestureRecognizer *) gesture - state: (UIGestureRecognizerState) state; + state: (int) state; @end // BWGestureThing @@ -237,7 +243,10 @@ - (void) drawRecognizer: (UIGestureRecognizer *) recognizer CGFloat pointsPerSecond = rect.size.width / self.totalDuration; + // Render all the various states for (BWGestureThing *thing in track) { + if (thing.state == kActionTriggered) continue; + NSTimeInterval adjustedTimestamp = thing.timestamp - _startTimestamp; CGFloat xPosition = rect.origin.x + adjustedTimestamp * pointsPerSecond; @@ -250,6 +259,29 @@ - (void) drawRecognizer: (UIGestureRecognizer *) recognizer [[UIColor redColor] set]; UIRectFrame (labelRect); } + + // Draw the action triggers + UIBezierPath *bezierPath = [UIBezierPath bezierPath]; + + [[UIColor grayColor] set]; + for (BWGestureThing *thing in track) { + if (thing.state != kActionTriggered) continue; + + [bezierPath removeAllPoints]; + + NSTimeInterval adjustedTimestamp = thing.timestamp - _startTimestamp; + CGFloat xPosition = rect.origin.x + adjustedTimestamp * pointsPerSecond; + CGFloat yBottom = rect.origin.y + rect.size.height; + + // Make a little chevron thing + [bezierPath moveToPoint: CGPointMake (xPosition - kActionChevronSize / 2.0, + yBottom)]; + [bezierPath addLineToPoint: CGPointMake (xPosition, + yBottom - kActionChevronSize)]; + [bezierPath addLineToPoint: CGPointMake (xPosition + kActionChevronSize / 2.0, + yBottom)]; + [bezierPath stroke]; + } } // drawRecognizer @@ -296,13 +328,19 @@ - (void) drawRect: (CGRect) rect { } // drawRect +- (void) recordActionForGestureRecognizer: (UIGestureRecognizer *) gestureRecognizer { + [self recordState: kActionTriggered + forRecognizer: gestureRecognizer]; +} // recordActionForGestureRecognizer + + @end // BWGestureTrackView @implementation BWGestureThing - (id) initWithGesture: (UIGestureRecognizer *) recognizer - state: (UIGestureRecognizerState) state { + state: (int) state { if ((self = [super init])) { _recognizer = recognizer; @@ -316,7 +354,7 @@ - (id) initWithGesture: (UIGestureRecognizer *) recognizer + (id) thingFromGesture: (UIGestureRecognizer *) recognizer - state: (UIGestureRecognizerState) state { + state: (int) state { return [[self alloc] initWithGesture: recognizer state: state]; } // thingFromGesture @@ -330,4 +368,5 @@ - (NSString *) description { } // description + @end // BWGestureThing diff --git a/Classes/BWTimeScrubberView.m b/Classes/BWTimeScrubberView.m index 3af8832..a3fcbda 100644 --- a/Classes/BWTimeScrubberView.m +++ b/Classes/BWTimeScrubberView.m @@ -91,7 +91,7 @@ - (void) drawTimelineInRect: (CGRect) rect { currentTime = 1.0; [[UIColor grayColor] set]; [path removeAllPoints]; - while (currentTime < self.totalDuration) { + while (currentTime <= self.totalDuration) { [path moveToPoint: CGPointMake (currentTime * pointsPerSecond, 0.0)]; [path addLineToPoint: CGPointMake (currentTime * pointsPerSecond, rect.size.height)]; diff --git a/Classes/BWViewController.m b/Classes/BWViewController.m index 01a7228..aa8c420 100644 --- a/Classes/BWViewController.m +++ b/Classes/BWViewController.m @@ -129,26 +129,31 @@ - (void) addSomeGestures { - (void) iPinchYou: (UIPinchGestureRecognizer *) pinchy { QuietLog (@"PEENCH"); + [self.gestureTrackView recordActionForGestureRecognizer: pinchy]; } // iPinchYou - (void) twoTap: (UITapGestureRecognizer *) tappy { QuietLog (@"TAPPY"); + [self.gestureTrackView recordActionForGestureRecognizer: tappy]; } // twoTap - (void) longPress: (UILongPressGestureRecognizer *) pressy { QuietLog (@"PRESSY"); + [self.gestureTrackView recordActionForGestureRecognizer: pressy]; } // longPress - (void) panny: (UIPanGestureRecognizer *) panny { QuietLog (@"PANNY"); + [self.gestureTrackView recordActionForGestureRecognizer: panny]; } // panny - (void) checky: (BIDCheckMarkGestureRecognizer *) checky { QuietLog (@"CHECKY"); + [self.gestureTrackView recordActionForGestureRecognizer: checky]; } // panny