123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- //
- // SCLTimerDisplay.m
- // SCLAlertView
- //
- // Created by Taylor Ryan on 8/18/15.
- // Copyright (c) 2015-2017 AnyKey Entertainment. All rights reserved.
- //
- #import "SCLTimerDisplay.h"
- #import "SCLMacros.h"
- @interface SCLTimerDisplay ()
- @property (strong, nonatomic) UILabel *countLabel;
- @end
- @implementation SCLTimerDisplay
- @synthesize currentAngle;
- - (instancetype)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self)
- {
- self.backgroundColor = [UIColor clearColor];
- currentAngle = 0.0f;
- }
- return self;
- }
- - (instancetype)initWithOrigin:(CGPoint)origin radius:(CGFloat)r
- {
- return [self initWithOrigin:(CGPoint)origin radius:r lineWidth:5.0f];
- }
- - (instancetype)initWithOrigin:(CGPoint)origin radius:(CGFloat)r lineWidth:(CGFloat)width
- {
- self = [super initWithFrame:CGRectMake(origin.x, origin.y, r*2, r*2)];
- if (self) {
- self.backgroundColor = [UIColor clearColor];
- currentAngle = START_DEGREE_OFFSET;
- radius = r-(width/2);
- lineWidth = width;
- self.color = [UIColor whiteColor];
- self.userInteractionEnabled = NO;
-
- // Add count label
- _countLabel = [[UILabel alloc] init];
- _countLabel.textColor = [UIColor whiteColor];
- _countLabel.backgroundColor = [UIColor clearColor];
- _countLabel.font = [UIFont fontWithName: @"HelveticaNeue-Bold" size:12.0f];
- _countLabel.textAlignment = NSTextAlignmentCenter;
- _countLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
- [self addSubview:_countLabel];
- }
- return self;
- }
- - (void)updateFrame:(CGSize)size
- {
- CGFloat r = radius+(lineWidth/2);
-
- CGFloat originX = size.width - (2*r) - 5;
- CGFloat originY = (size.height - (2*r))/2;
-
- self.frame = CGRectMake(originX, originY, r*2, r*2);
- self.countLabel.frame = CGRectMake(0, 0, r*2, r*2);
- }
- - (void)drawRect:(CGRect)rect
- {
- UIBezierPath* aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(radius+(lineWidth/2), radius+(lineWidth/2))
- radius:radius
- startAngle:DEGREES_TO_RADIANS(START_DEGREE_OFFSET)
- endAngle:DEGREES_TO_RADIANS(currentAngle)
- clockwise:YES];
- [self.color setStroke];
- aPath.lineWidth = lineWidth;
- [aPath stroke];
-
- _countLabel.text = [NSString stringWithFormat:@"%d", (int)currentTime];
- }
- - (void)startTimerWithTimeLimit:(int)tl completed:(SCLActionBlock)completed
- {
- if (_reverse)
- {
- currentTime = tl;
- }
- timerLimit = tl;
- timer = [NSTimer scheduledTimerWithTimeInterval:TIMER_STEP target:self selector:@selector(updateTimerButton:) userInfo:nil repeats:YES];
- completedBlock = completed;
- _countLabel.textColor = _color;
- }
- - (void)cancelTimer
- {
- [timer invalidate];
- }
- - (void)stopTimer
- {
- [timer invalidate];
- if (completedBlock != nil) {
- completedBlock();
- }
- }
- - (void)updateTimerButton:(NSTimer *)timer
- {
- if (_reverse)
- {
- currentTime -= TIMER_STEP;
- currentAngle = (currentTime/timerLimit) * 360 + START_DEGREE_OFFSET;
-
- if(currentTime <= 0) {
- [self stopTimer];
- }
- }
- else {
- currentTime += TIMER_STEP;
- currentAngle = (currentTime/timerLimit) * 360 + START_DEGREE_OFFSET;
- if(currentAngle >= (360 + START_DEGREE_OFFSET)) {
- [self stopTimer];
- }
- }
- [self setNeedsDisplay];
- }
- @end
|