From cbb9b3107bf74969f063da58ceed6dbcab1a8940 Mon Sep 17 00:00:00 2001 From: Darin Doria Date: Sat, 5 Apr 2014 14:05:15 -0400 Subject: [PATCH] Included coach mark files with sample --- Coach Marks/DDBubble.h | 32 ++ Coach Marks/DDBubble.m | 231 +++++++++++ Coach Marks/DDCircleView.h | 17 + Coach Marks/DDCircleView.m | 112 ++++++ Coach Marks/DDCoachMarksView.h | 40 ++ Coach Marks/DDCoachMarksView.m | 367 ++++++++++++++++++ .../BackgroundImage.imageset/Contents.json | 18 + .../BackgroundImage.imageset/Portrait-1.png | Bin 0 -> 56352 bytes .../BackgroundImage.imageset/Portrait.png | Bin 0 -> 56352 bytes 9 files changed, 817 insertions(+) create mode 100755 Coach Marks/DDBubble.h create mode 100755 Coach Marks/DDBubble.m create mode 100644 Coach Marks/DDCircleView.h create mode 100644 Coach Marks/DDCircleView.m create mode 100755 Coach Marks/DDCoachMarksView.h create mode 100755 Coach Marks/DDCoachMarksView.m create mode 100644 Coach Marks/Images.xcassets/BackgroundImage.imageset/Contents.json create mode 100644 Coach Marks/Images.xcassets/BackgroundImage.imageset/Portrait-1.png create mode 100644 Coach Marks/Images.xcassets/BackgroundImage.imageset/Portrait.png diff --git a/Coach Marks/DDBubble.h b/Coach Marks/DDBubble.h new file mode 100755 index 0000000..dd85c3d --- /dev/null +++ b/Coach Marks/DDBubble.h @@ -0,0 +1,32 @@ +// +// DDBubble.h +// Coach Marks +// +// Created by Darin Doria on 02/17/2014. +// Copyright (c) 2014 Darin Doria. All rights reserved. +// + +#import + +@interface DDBubble : UIView + +typedef enum { + CRArrowPositionTop, + CRArrowPositionBottom, + CRArrowPositionRight, + CRArrowPositionLeft +} CRArrowPosition; + +@property (nonatomic, assign) CRArrowPosition arrowPosition; +@property (nonatomic, strong) UIView *attachedView; +@property (nonatomic, strong) NSString *title; +@property (nonatomic, strong) NSString *bubbleText; +@property (nonatomic, strong) UIColor *color; +@property (nonatomic) CGRect attachedFrame; +@property (nonatomic) BOOL bouncing; +@property (nonatomic) BOOL animationShouldStop; + +-(id)initWithAttachedView:(UIView*)view title:(NSString*)title description:(NSString*)description arrowPosition:(CRArrowPosition)arrowPosition andColor:(UIColor*)color; +-(id)initWithFrame:(CGRect)frame title:(NSString*)title description:(NSString*)description arrowPosition:(CRArrowPosition)arrowPosition andColor:(UIColor*)color; +-(void)animate; +@end \ No newline at end of file diff --git a/Coach Marks/DDBubble.m b/Coach Marks/DDBubble.m new file mode 100755 index 0000000..42ec454 --- /dev/null +++ b/Coach Marks/DDBubble.m @@ -0,0 +1,231 @@ +// +// DDBubble.m +// Coach Marks +// +// Created by Darin Doria on 02/17/2014. +// Copyright (c) 2014 Darin Doria. All rights reserved. +// + +#import "DDBubble.h" + +#define ARROW_SPACE 6 // space between arrow and highlighted region +#define ARROW_SIZE 8 +#define PADDING 8 // padding between text and border of bubble +#define RADIUS 6 +#define TEXT_COLOR [UIColor blackColor] +#define TITLE_FONT_SIZE 14 + +@interface DDBubble () +{ + float _arrowOffset; +} + +@end + +@implementation DDBubble + + +#pragma mark - Initialization + +-(id)initWithAttachedView:(UIView*)view title:(NSString*)title description:(NSString*)description arrowPosition:(CRArrowPosition)arrowPosition andColor:(UIColor*)color +{ + return [self initWithFrame:view.frame title:title description:description arrowPosition:arrowPosition andColor:color]; +} + +-(id)initWithFrame:(CGRect)frame title:(NSString*)title description:(NSString*)description arrowPosition:(CRArrowPosition)arrowPosition andColor:(UIColor*)color +{ + self = [super init]; + if(self) + { + if(color!=nil) + self.color=color; + else + self.color=[UIColor whiteColor]; + + self.attachedFrame = frame; + self.title = title; + self.bubbleText = description; + self.arrowPosition = arrowPosition; + [self setBackgroundColor:[UIColor clearColor]]; + } + + // position bubble + [self setFrame:[self calculateFrame]]; + [self fixFrameIfOutOfBounds]; + + // calculate and position text + float actualXPosition = [self offsets].width+PADDING*1.5; + float actualYPosition = [self offsets].height+PADDING*1.25; + float actualWidth = self.frame.size.width; + float actualHeight = TITLE_FONT_SIZE+3; + + UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(actualXPosition, actualYPosition, actualWidth, actualHeight)]; + [titleLabel setTextColor:TEXT_COLOR]; + [titleLabel setAlpha:0.9]; + [titleLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:TITLE_FONT_SIZE]]; + [titleLabel setText:title]; + [titleLabel setBackgroundColor:[UIColor clearColor]]; + [self addSubview:titleLabel]; + + + [self setNeedsDisplay]; + return self; +} + + +#pragma mark - Positioning and Size + +- (void)fixFrameIfOutOfBounds +{ + /** + * Description: + * + * Check if bubble is going off the screen using the + * position and size. If it is, return YES. + */ + + const float xBounds = 320; +// const float yBounds = 568; + + float x = self.frame.origin.x; + float y = self.frame.origin.y; + float width = self.frame.size.width; + float height = self.frame.size.height; + + float padding = 3; + + // check for right most bound + if (x + width > xBounds) { + _arrowOffset = (x + width) - xBounds; + x = x - _arrowOffset; + } + // check for left most bound + else if (x < 0) { + _arrowOffset = x - padding; + x = x - _arrowOffset + padding; + } + + [self setFrame:CGRectMake(x, y, width, height)]; +} + +-(CGRect)calculateFrame +{ + //Calculation of the bubble position + float x = self.attachedFrame.origin.x; + float y = self.attachedFrame.origin.y; + + + if(self.arrowPosition==CRArrowPositionLeft||self.arrowPosition==CRArrowPositionRight) + { + y+=self.attachedFrame.size.height/2-[self size].height/2; + x+=(self.arrowPosition==CRArrowPositionLeft)? ARROW_SPACE+self.attachedFrame.size.width : -(ARROW_SPACE*2+[self size].width); + + }else if(self.arrowPosition==CRArrowPositionTop||self.arrowPosition==CRArrowPositionBottom) + { + x+=self.attachedFrame.size.width/2-[self size].width/2; + y+=(self.arrowPosition==CRArrowPositionTop)? ARROW_SPACE+self.attachedFrame.size.height : -(ARROW_SPACE*2+[self size].height); + } + + return CGRectMake(x, y, [self size].width+ARROW_SIZE, [self size].height+ARROW_SIZE); +} + +-(CGSize)size +{ + // Calcultation of the bubble size + // size of bubble title determined by the strings attributes + CGSize result = [_title sizeWithAttributes:@{ + NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:TITLE_FONT_SIZE] + + }]; + + return CGSizeMake(result.width + (PADDING*3), result.height + (PADDING*2.5)); +} + +-(CGSize)offsets +{ + return CGSizeMake((self.arrowPosition==CRArrowPositionLeft)? ARROW_SIZE : 0, (self.arrowPosition==CRArrowPositionTop)? ARROW_SIZE : 0); +} + + + +#pragma mark - Drawing and Animation + +- (void)drawRect:(CGRect)rect +{ + + CGContextRef ctx = UIGraphicsGetCurrentContext(); + CGContextSaveGState(ctx); + + CGPathRef clippath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake([self offsets].width,[self offsets].height, [self size].width, [self size].height) cornerRadius:RADIUS].CGPath; + CGContextAddPath(ctx, clippath); + + CGContextSetFillColorWithColor(ctx, self.color.CGColor); + + CGContextClosePath(ctx); + CGContextFillPath(ctx); + + [self.color set]; + + // tip of arrow needs to be centered under highlighted region + // this center area is always arrow size divided by 2 + float center = ARROW_SIZE/2; + + // points used to draw arrow + // Wide Arrow --> x = center + - ArrowSize + // Skinny Arrow --> x = center + - center + // Normal Arrow --> + CGPoint startPoint = CGPointMake(center - ARROW_SIZE, ARROW_SIZE); + CGPoint midPoint = CGPointMake(center, 0); + CGPoint endPoint = CGPointMake(center + ARROW_SIZE, ARROW_SIZE); + + + UIBezierPath *path = [UIBezierPath bezierPath]; + [path moveToPoint:startPoint]; + [path addLineToPoint:endPoint]; + [path addLineToPoint:midPoint]; + [path addLineToPoint:startPoint]; + + + if(self.arrowPosition==CRArrowPositionTop) + { + CGAffineTransform trans = CGAffineTransformMakeTranslation([self size].width/2-(ARROW_SIZE)/2+_arrowOffset, 0); + [path applyTransform:trans]; + }else if(self.arrowPosition==CRArrowPositionBottom) + { + CGAffineTransform rot = CGAffineTransformMakeRotation(M_PI); + CGAffineTransform trans = CGAffineTransformMakeTranslation([self size].width/2+(ARROW_SIZE)/2+_arrowOffset, [self size].height+ARROW_SIZE); + [path applyTransform:rot]; + [path applyTransform:trans]; + }else if(self.arrowPosition==CRArrowPositionLeft) + { + CGAffineTransform rot = CGAffineTransformMakeRotation(M_PI*1.5); + CGAffineTransform trans = CGAffineTransformMakeTranslation(0, ([self size].height+ARROW_SIZE)/2); + [path applyTransform:rot]; + [path applyTransform:trans]; + }else if(self.arrowPosition==CRArrowPositionRight) + { + CGAffineTransform rot = CGAffineTransformMakeRotation(M_PI*0.5); + CGAffineTransform trans = CGAffineTransformMakeTranslation([self size].width+ARROW_SIZE, ([self size].height-ARROW_SIZE)/2); + [path applyTransform:rot]; + [path applyTransform:trans]; + } + + [path closePath]; // Implicitly does a line between p4 and p1 + [path fill]; // If you want it filled, or... + [path stroke]; // ...if you want to draw the outline. + CGContextRestoreGState(ctx); +} + +- (void)animate +{ + [UIView animateWithDuration:2.0f + delay:0.3 + options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse) + animations:^ { + self.transform = CGAffineTransformMakeTranslation(0, -4); + } + completion:^(BOOL finished) { + }]; +} + +@end diff --git a/Coach Marks/DDCircleView.h b/Coach Marks/DDCircleView.h new file mode 100644 index 0000000..4d2c3a8 --- /dev/null +++ b/Coach Marks/DDCircleView.h @@ -0,0 +1,17 @@ +// +// DDCircleView.h +// CoachMarks +// +// Created by Darin Doria on 2/17/14. +// Copyright (c) 2014 Darin Doria. All rights reserved. +// + +#import + +@interface DDCircleView : UIView + +@property BOOL animationShouldStop; + +- (void)swipeInFrame:(CGRect)frame; + +@end diff --git a/Coach Marks/DDCircleView.m b/Coach Marks/DDCircleView.m new file mode 100644 index 0000000..5952460 --- /dev/null +++ b/Coach Marks/DDCircleView.m @@ -0,0 +1,112 @@ +// +// DDCircleView.m +// CoachMarks +// +// Created by Darin Doria on 2/17/14. +// Copyright (c) 2014 Darin Doria. All rights reserved. +// + +#import "DDCircleView.h" + +@implementation DDCircleView + +- (id)initWithFrame:(CGRect)aRect +{ + self = [super initWithFrame:CGRectMake(10, 0, 40, 40)]; + + if (self) { + self.backgroundColor = [UIColor clearColor]; + CAShapeLayer *shapeLayer = (CAShapeLayer *) self.layer; + shapeLayer.path = ([UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 40, 40)].CGPath); + shapeLayer.fillColor = [UIColor colorWithWhite:1.000 alpha:1.00].CGColor; + shapeLayer.shadowRadius = 8.0; + shapeLayer.shadowOffset = CGSizeMake(0, 0); + shapeLayer.shadowColor = [UIColor colorWithRed:0.000 green:0.299 blue:0.715 alpha:1.000].CGColor; + shapeLayer.shadowOpacity = 1.0; + shapeLayer.shadowPath = ([UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 40, 40)].CGPath); + + self.animationShouldStop = NO; + } + + return self; +} + +- (void)userTap:(UITapGestureRecognizer *)recognizer { + self.hidden = YES; + [self removeFromSuperview]; +} + +- (void)swipeInFrame:(CGRect)frame +{ + [self centerYPositioninView:self inFrame:frame]; + [self animateSwipeRight]; +} + +- (void)animateSwipeRight +{ + if (!_animationShouldStop) { + self.transform = CGAffineTransformMakeScale(2, 2); + self.alpha = 0.0f; + [UIView animateKeyframesWithDuration:0.6 delay:0.3 options:0 + animations:^{ + // Fade In + self.transform = CGAffineTransformMakeScale(1, 1); + self.alpha = 1.0f; + } + completion:^(BOOL finished){ + // End + [UIView animateWithDuration:1.0 + animations:^{ + // Slide Right + self.transform = CGAffineTransformMakeTranslation(260, 0); + // Fade Out + self.alpha = 0.0f; + + } + completion:^(BOOL finished) { + // End + [UIView animateWithDuration:0.5 + animations:^{ + // Fade Out + //self.alpha = 0.0f; + } + completion:^(BOOL finished) { + // End + [self performSelector:@selector(animateSwipeRight)]; + }]; + }]; + }]; + } + +} + +- (void)centerYPositioninView:(UIView *)view inFrame:(CGRect)frame +{ + CGFloat centerY = frame.origin.y + CGRectGetHeight(frame)/2; + CGFloat offsetY = CGRectGetHeight(view.frame)/2; + + CGFloat newY = centerY - offsetY; + view.frame = CGRectMake(view.frame.origin.x, newY, 40, 40); +} + +- (void)centerXPositioninView:(UIView *)view inFrame:(CGRect)frame +{ + CGFloat centerX = frame.origin.x + CGRectGetWidth(frame)/2; + CGFloat offsetX = CGRectGetWidth(view.frame)/2; + + CGFloat newX = centerX - offsetX; + view.frame = CGRectMake(newX, view.frame.origin.y, 40, 40); +} + +- (void)centerInView:(UIView *)view inFrame:(CGRect)frame +{ + [self centerYPositioninView:view inFrame:frame]; + [self centerXPositioninView:view inFrame:frame]; +} + ++ (Class)layerClass +{ + return [CAShapeLayer class]; +} + +@end diff --git a/Coach Marks/DDCoachMarksView.h b/Coach Marks/DDCoachMarksView.h new file mode 100755 index 0000000..e728c61 --- /dev/null +++ b/Coach Marks/DDCoachMarksView.h @@ -0,0 +1,40 @@ +// +// DDCoachMarksView.h +// Coach Marks +// +// Created by Darin Doria on 02/17/2014. +// Copyright (c) 2014 Darin Doria. All rights reserved. +// + + +#import + +@protocol DDCoachMarksViewDelegate; + +@interface DDCoachMarksView : UIView + +@property (nonatomic, weak) id delegate; +@property (nonatomic, retain) NSArray *coachMarks; +@property (nonatomic, weak) UILabel *lblCaption; +@property (nonatomic, retain) UIColor *maskColor; +@property (nonatomic) CGFloat animationDuration; +@property (nonatomic) CGFloat cutoutRadius; +@property (nonatomic) CGFloat maxLblWidth; +@property (nonatomic) CGFloat lblSpacing; +@property (nonatomic) BOOL useBubbles; + +- (id)initWithFrame:(CGRect)frame coachMarks:(NSArray *)marks; +- (void)start; + +@end + +@protocol DDCoachMarksViewDelegate + +@optional +- (void)coachMarksView:(DDCoachMarksView*)coachMarksView willNavigateToIndex:(NSUInteger)index; +- (void)coachMarksView:(DDCoachMarksView*)coachMarksView didNavigateToIndex:(NSUInteger)index; +- (void)coachMarksViewWillCleanup:(DDCoachMarksView*)coachMarksView; +- (void)coachMarksViewDidCleanup:(DDCoachMarksView*)coachMarksView; +- (void)didTapAtIndex:(NSUInteger)index; + +@end \ No newline at end of file diff --git a/Coach Marks/DDCoachMarksView.m b/Coach Marks/DDCoachMarksView.m new file mode 100755 index 0000000..6916e40 --- /dev/null +++ b/Coach Marks/DDCoachMarksView.m @@ -0,0 +1,367 @@ +// +// DDCoachMarksView.m +// Coach Marks +// +// Created by Darin Doria on 02/17/2014. +// Copyright (c) 2014 Darin Doria. All rights reserved. +// + +#import +#import "DDCoachMarksView.h" +#import "DDCircleView.h" +#import "DDBubble.h" + +static const CGFloat kAnimationDuration = 0.3f; +static const CGFloat kCutoutRadius = 2.0f; +static const CGFloat kMaxLblWidth = 230.0f; +static const CGFloat kLblSpacing = 35.0f; + +@interface DDCoachMarksView () +@property (nonatomic, strong) DDCircleView *animatingCircle; +@property (nonatomic, strong) DDBubble *bubble; +@end + +@implementation DDCoachMarksView { + CAShapeLayer *mask; + NSUInteger markIndex; + UILabel *lblContinue; +} + +#pragma mark - Methods + +- (id)initWithFrame:(CGRect)frame coachMarks:(NSArray *)marks { + self = [super initWithFrame:frame]; + if (self) { + // Save the coach marks + self.coachMarks = marks; + + // Setup + [self setup]; + } + return self; +} + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + // Setup + [self setup]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + // Setup + [self setup]; + } + return self; +} + +- (void)setup { + // Default + self.animationDuration = kAnimationDuration; + self.cutoutRadius = kCutoutRadius; + self.maxLblWidth = kMaxLblWidth; + self.lblSpacing = kLblSpacing; + self.useBubbles = YES; + + // Shape layer mask + mask = [CAShapeLayer layer]; + [mask setFillRule:kCAFillRuleEvenOdd]; + [mask setFillColor:[[UIColor colorWithWhite:0.000 alpha:0.800] CGColor]]; + [self.layer addSublayer:mask]; + + // Capture touches + UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userDidTap:)]; + UISwipeGestureRecognizer *swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:nil]; + [self addGestureRecognizer:swipeGestureRecognizer]; + [self addGestureRecognizer:tapGestureRecognizer]; + + // show skip button + UIButton *skipButton = [UIButton buttonWithType:UIButtonTypeSystem]; + skipButton.frame = CGRectMake(150, 500, 100, 50); + [skipButton setTitle:@"Skip" forState:UIControlStateNormal]; + [skipButton addTarget:self action:@selector(skipButtonTapped) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:skipButton]; + + // Hide until unvoked + self.hidden = YES; +} + +#pragma mark - Cutout modify + +- (void)setCutoutToRect:(CGRect)rect withShape:(NSString *)shape{ + // Define shape + UIBezierPath *maskPath = [UIBezierPath bezierPathWithRect:self.bounds]; + UIBezierPath *cutoutPath; + + if ([shape isEqualToString:@"circle"]) + cutoutPath = [UIBezierPath bezierPathWithOvalInRect:rect]; + else if ([shape isEqualToString:@"square"]) + cutoutPath = [UIBezierPath bezierPathWithRect:rect]; + else + cutoutPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:self.cutoutRadius]; + + [maskPath appendPath:cutoutPath]; + + // Set the new path + mask.path = maskPath.CGPath; +} + +- (void)animateCutoutToRect:(CGRect)rect withShape:(NSString *)shape{ + // Define shape + UIBezierPath *maskPath = [UIBezierPath bezierPathWithRect:self.bounds]; + UIBezierPath *cutoutPath; + + + if ([shape isEqualToString:@"circle"]) + cutoutPath = [UIBezierPath bezierPathWithOvalInRect:rect]; + else if ([shape isEqualToString:@"square"]) + cutoutPath = [UIBezierPath bezierPathWithRect:rect]; + else + cutoutPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:self.cutoutRadius]; + + [maskPath appendPath:cutoutPath]; + + // Animate it + CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"path"]; + anim.delegate = self; + anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; + anim.duration = self.animationDuration; + anim.removedOnCompletion = NO; + anim.fillMode = kCAFillModeForwards; + anim.fromValue = (__bridge id)(mask.path); + anim.toValue = (__bridge id)(maskPath.CGPath); + [mask addAnimation:anim forKey:@"path"]; + mask.path = maskPath.CGPath; +} + +#pragma mark - Mask color + +- (void)setMaskColor:(UIColor *)maskColor { + _maskColor = maskColor; + [mask setFillColor:[maskColor CGColor]]; +} + +#pragma mark - Touch handler + +- (void)userDidTap:(UITapGestureRecognizer *)recognizer { + + if ([self.delegate respondsToSelector:@selector(didTapAtIndex:)]) { + [self.delegate didTapAtIndex:markIndex]; + } + + // Go to the next coach mark + [self goToCoachMarkIndexed:(markIndex+1)]; +} + +#pragma mark - Tapped Button + +- (void)skipButtonTapped +{ + // set all coach mark user defualts to seen + + // go to end of current coach marks + [self goToCoachMarkIndexed:self.coachMarks.count]; +} + +#pragma mark - Navigation + +- (void)start { + // Fade in self + self.alpha = 0.0f; + self.hidden = NO; + [UIView animateWithDuration:self.animationDuration + animations:^{ + self.alpha = 1.0f; + } + completion:^(BOOL finished) { + // Go to the first coach mark + [self goToCoachMarkIndexed:0]; + }]; +} + +- (void)goToCoachMarkIndexed:(NSUInteger)index { + // Out of bounds + if (index >= self.coachMarks.count) { + [self cleanup]; + return; + } + + // Current index + markIndex = index; + + // Coach mark definition + NSDictionary *markDef = [self.coachMarks objectAtIndex:index]; + NSString *markCaption = [markDef objectForKey:@"caption"]; + CGRect markRect = [[markDef objectForKey:@"rect"] CGRectValue]; + NSString *shape = [markDef objectForKey:@"shape"]; + + // Delegate (coachMarksView:willNavigateTo:atIndex:) + if ([self.delegate respondsToSelector:@selector(coachMarksView:willNavigateToIndex:)]) { + [self.delegate coachMarksView:self willNavigateToIndex:markIndex]; + } + + if (self.useBubbles) { + [self animateNextBubble]; + } + + else { + // Calculate the caption position and size + self.lblCaption.alpha = 0.0f; + self.lblCaption.frame = (CGRect){{0.0f, 0.0f}, {self.maxLblWidth, 0.0f}}; + self.lblCaption.text = markCaption; + [self.lblCaption sizeToFit]; + CGFloat y = markRect.origin.y + markRect.size.height + self.lblSpacing; + CGFloat bottomY = y + self.lblCaption.frame.size.height + self.lblSpacing; + if (bottomY > self.bounds.size.height) { + y = markRect.origin.y - self.lblSpacing - self.lblCaption.frame.size.height; + } + CGFloat x = floorf((self.bounds.size.width - self.lblCaption.frame.size.width) / 2.0f); + + // Animate the caption label + self.lblCaption.frame = (CGRect){{x, y}, self.lblCaption.frame.size}; + [UIView animateWithDuration:0.3f animations:^{ + self.lblCaption.alpha = 1.0f; + }]; + } + + // If first mark, set the cutout to the center of first mark + if (markIndex == 0) { + CGPoint center = CGPointMake(floorf(markRect.origin.x + (markRect.size.width / 2.0f)), floorf(markRect.origin.y + (markRect.size.height / 2.0f))); + CGRect centerZero = (CGRect){center, CGSizeZero}; + [self setCutoutToRect:centerZero withShape:shape]; + } + + // Animate the cutout + [self animateCutoutToRect:markRect withShape:shape]; + + // Animate swipe gesture + [self showSwipeGesture]; +} + +#pragma mark - Swipe Animation + +- (void)showSwipeGesture +{ + NSDictionary *coachMarkInfo = [self.coachMarks objectAtIndex:markIndex]; + CGRect frame = [[coachMarkInfo objectForKey:@"rect"] CGRectValue]; + BOOL shouldAnimateSwipe = [[coachMarkInfo objectForKey:@"swipe"] boolValue]; + + // if next animation doesn't need swipe + // remove current swiping circle if one exists + if (self.animatingCircle) { + [UIView animateWithDuration:0.6 delay:0.3 options:0 animations:^{ + self.animatingCircle.alpha = 0.0f; + } completion:^(BOOL finished) { + [self.animatingCircle removeFromSuperview]; + }]; + } + + // create an animating circle and animate it + if (shouldAnimateSwipe) { + self.animatingCircle = [[DDCircleView alloc] initWithFrame:CGRectZero]; + + if (![self.subviews containsObject:self.animatingCircle]) { + [self addSubview:self.animatingCircle]; + } + + [self.animatingCircle swipeInFrame:frame]; + } +} + + +#pragma mark - Bubble Caption + +- (void)animateNextBubble +{ + // Get current coach mark information + NSDictionary *coachMarkInfo = [self.coachMarks objectAtIndex:markIndex]; + NSString *markCaption = [coachMarkInfo objectForKey:@"caption"]; + CGRect frame = [[coachMarkInfo objectForKey:@"rect"] CGRectValue]; + CGRect poi = [[coachMarkInfo objectForKey:@"POI"] CGRectValue]; + + // remove previous bubble + if (self.bubble) { + [UIView animateKeyframesWithDuration:0.3 delay:0.0 options:0 + animations:^{ + self.bubble.alpha = 0.0; + } completion:nil]; + } + + // return if no text for bubble + if ([markCaption length] == 0) + return; + + // create bubble + // IF using point of interest (poi) frame use that instead of cutout frame + // ELSE use the cutout frame + if (CGRectIsEmpty(poi)) { + self.bubble = [[DDBubble alloc] initWithFrame:frame title:markCaption description:nil arrowPosition:CRArrowPositionTop andColor:nil]; + } else + self.bubble = [[DDBubble alloc] initWithFrame:poi title:markCaption description:nil arrowPosition:CRArrowPositionTop andColor:nil]; + + self.bubble.alpha = 0.0; + [self addSubview:self.bubble]; + + // fade in & bounce animation + [UIView animateKeyframesWithDuration:0.8 delay:0.3 options:0 + animations:^{ + self.bubble.alpha = 1.0; + [self.bubble animate]; + } completion:^(BOOL finished) { + + }]; +} + +#pragma mark - Cleanup + +- (void)cleanup { + // Delegate (coachMarksViewWillCleanup:) + if ([self.delegate respondsToSelector:@selector(coachMarksViewWillCleanup:)]) { + [self.delegate coachMarksViewWillCleanup:self]; + } + + __weak DDCoachMarksView *weakSelf = self; + + // animate & remove from super view + [UIView animateKeyframesWithDuration:0.6 delay:0.3 options:0 + animations:^{ + self.alpha = 0.0f; + self.animatingCircle.alpha = 0.0f; + self.bubble.alpha = 0.0f; + } completion:^(BOOL finished) { + // Remove self + weakSelf.animatingCircle.animationShouldStop = YES; + weakSelf.bubble.animationShouldStop = YES; + [weakSelf.animatingCircle removeFromSuperview]; + [weakSelf.bubble removeFromSuperview]; + [weakSelf removeFromSuperview]; + + // Delegate (coachMarksViewDidCleanup:) + if ([weakSelf.delegate respondsToSelector:@selector(coachMarksViewDidCleanup:)]) { + [weakSelf.delegate coachMarksViewDidCleanup:weakSelf]; + } + }]; +} + +-(void)dealloc +{ + self.animatingCircle = nil; + self.bubble = nil; + self.maskColor = nil; + self.coachMarks = nil; +} + +#pragma mark - Animation delegate + +- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { + // Delegate (coachMarksView:didNavigateTo:atIndex:) + if ([self.delegate respondsToSelector:@selector(coachMarksView:didNavigateToIndex:)]) { + [self.delegate coachMarksView:self didNavigateToIndex:markIndex]; + } +} + +@end \ No newline at end of file diff --git a/Coach Marks/Images.xcassets/BackgroundImage.imageset/Contents.json b/Coach Marks/Images.xcassets/BackgroundImage.imageset/Contents.json new file mode 100644 index 0000000..0a65f57 --- /dev/null +++ b/Coach Marks/Images.xcassets/BackgroundImage.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "Portrait.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "Portrait-1.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Coach Marks/Images.xcassets/BackgroundImage.imageset/Portrait-1.png b/Coach Marks/Images.xcassets/BackgroundImage.imageset/Portrait-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a70d1fa6343c3e9b9e80f48fe8143630d3722d54 GIT binary patch literal 56352 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