New file |
| | |
| | | // |
| | | // HMScannerBorder.m |
| | | // HMQRCodeScanner |
| | | // |
| | | // Created by 刘凡 on 16/1/2. |
| | | // Copyright © 2016年 itheima. All rights reserved. |
| | | // |
| | | |
| | | #import "HMScannerBorder.h" |
| | | |
| | | @implementation HMScannerBorder { |
| | | /// 冲击波图像 |
| | | UIImageView *scannerLine; |
| | | } |
| | | |
| | | - (instancetype)initWithFrame:(CGRect)frame { |
| | | self = [super initWithFrame:frame]; |
| | | if (self) { |
| | | [self prepareUI]; |
| | | } |
| | | return self; |
| | | } |
| | | |
| | | #pragma mark - 扫描动画方法 |
| | | /// 开始扫描动画 |
| | | - (void)startScannerAnimating { |
| | | |
| | | [self stopScannerAnimating]; |
| | | |
| | | [UIView animateWithDuration:3.0 |
| | | delay:0.0 |
| | | options:UIViewAnimationOptionCurveEaseInOut |
| | | animations:^{ |
| | | [UIView setAnimationRepeatCount:MAXFLOAT]; |
| | | |
| | | scannerLine.center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height); |
| | | } completion:nil]; |
| | | } |
| | | |
| | | /// 停止扫描动画 |
| | | - (void)stopScannerAnimating { |
| | | [scannerLine.layer removeAllAnimations]; |
| | | scannerLine.center = CGPointMake(self.bounds.size.width * 0.5, 0); |
| | | } |
| | | |
| | | #pragma mark - 设置界面 |
| | | - (void)prepareUI { |
| | | self.clipsToBounds = YES; |
| | | |
| | | // 图像文件包 |
| | | NSBundle *bundle = [NSBundle bundleForClass:[self class]]; |
| | | NSURL *url = [bundle URLForResource:@"HMScanner" withExtension:@"bundle"]; |
| | | NSBundle *imageBundle = [NSBundle bundleWithURL:url]; |
| | | |
| | | // 冲击波图像 |
| | | scannerLine = [[UIImageView alloc] initWithImage:[self imageWithName:@"QRCodeScanLine" bundle:imageBundle]]; |
| | | |
| | | scannerLine.frame = CGRectMake(0, 0, self.bounds.size.width, scannerLine.bounds.size.height); |
| | | scannerLine.center = CGPointMake(self.bounds.size.width * 0.5, 0); |
| | | |
| | | [self addSubview:scannerLine]; |
| | | |
| | | // 加载边框图像 |
| | | for (NSInteger i = 1; i < 5; i++) { |
| | | NSString *imgName = [NSString stringWithFormat:@"ScanQR%zd", i]; |
| | | UIImageView *img = [[UIImageView alloc] initWithImage:[self imageWithName:imgName bundle:imageBundle]]; |
| | | |
| | | [self addSubview:img]; |
| | | |
| | | CGFloat offsetX = self.bounds.size.width - img.bounds.size.width; |
| | | CGFloat offsetY = self.bounds.size.height - img.bounds.size.height; |
| | | |
| | | switch (i) { |
| | | case 2: |
| | | img.frame = CGRectOffset(img.frame, offsetX, 0); |
| | | break; |
| | | case 3: |
| | | img.frame = CGRectOffset(img.frame, 0, offsetY); |
| | | break; |
| | | case 4: |
| | | img.frame = CGRectOffset(img.frame, offsetX, offsetY); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | - (UIImage *)imageWithName:(NSString *)imageName bundle:(NSBundle *)imageBundle { |
| | | NSString *fileName = [NSString stringWithFormat:@"%@@2x", imageName]; |
| | | NSString *path = [imageBundle pathForResource:fileName ofType:@"png"]; |
| | | |
| | | return [[UIImage imageWithContentsOfFile:path] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; |
| | | } |
| | | |
| | | @end |