// // LBXScanLineAnimation.m // // // Created by lbxia on 15/11/3. // Copyright © 2015年 lbxia. All rights reserved. // #import "LBXScanLineAnimation.h" @interface LBXScanLineAnimation() { int num; BOOL down; NSTimer * timer; BOOL isAnimationing; } @property (nonatomic,assign) CGRect animationRect; @end @implementation LBXScanLineAnimation - (void)stepAnimation { if (!isAnimationing) { return; } CGFloat leftx = _animationRect.origin.x + 5; CGFloat width = _animationRect.size.width - 10; self.frame = CGRectMake(leftx, _animationRect.origin.y + 8, width, 8); self.alpha = 0.0; self.hidden = NO; __weak __typeof(self) weakSelf = self; [UIView animateWithDuration:0.5 animations:^{ weakSelf.alpha = 1.0; } completion:^(BOOL finished) { }]; [UIView animateWithDuration:3 animations:^{ CGFloat leftx = _animationRect.origin.x + 5; CGFloat width = _animationRect.size.width - 10; weakSelf.frame = CGRectMake(leftx, _animationRect.origin.y + _animationRect.size.height - 8, width, 4); } completion:^(BOOL finished) { self.hidden = YES; [weakSelf performSelector:@selector(stepAnimation) withObject:nil afterDelay:0.3]; }]; } - (void)startAnimatingWithRect:(CGRect)animationRect InView:(UIView *)parentView Image:(UIImage*)image { if (isAnimationing) { return; } isAnimationing = YES; self.animationRect = animationRect; down = YES; num =0; CGFloat centery = CGRectGetMinY(animationRect) + CGRectGetHeight(animationRect)/2; CGFloat leftx = animationRect.origin.x + 5; CGFloat width = animationRect.size.width - 10; self.frame = CGRectMake(leftx, centery+2*num, width, 2); self.image = image; [parentView addSubview:self]; [self startAnimating_UIViewAnimation]; // [self startAnimating_NSTimer]; } - (void)startAnimating_UIViewAnimation { [self stepAnimation]; } - (void)startAnimating_NSTimer { timer = [NSTimer scheduledTimerWithTimeInterval:.02 target:self selector:@selector(scanLineAnimation) userInfo:nil repeats:YES]; } -(void)scanLineAnimation { CGFloat centery = CGRectGetMinY(_animationRect) + CGRectGetHeight(_animationRect)/2; CGFloat leftx = _animationRect.origin.x + 5; CGFloat width = _animationRect.size.width - 10; if (down) { num++; self.frame = CGRectMake(leftx, centery+2*num, width, 2); if (centery+2*num > (CGRectGetMinY(_animationRect) + CGRectGetHeight(_animationRect) - 5 ) ) { down = NO; } } else { num --; self.frame = CGRectMake(leftx, centery+2*num, width, 2); if (centery+2*num < (CGRectGetMinY(_animationRect) + 5 ) ) { down = YES; } } } - (void)dealloc { [self stopAnimating]; } - (void)stopAnimating { if (isAnimationing) { isAnimationing = NO; if (timer) { [timer invalidate]; timer = nil; } [self removeFromSuperview]; } [NSObject cancelPreviousPerformRequestsWithTarget:self]; } @end