iOS15仿微信二维码详情页面

#import "DetailViewController.h"
#import "UIView+Frame.h"
#define kScreenW [UIScreen mainScreen].bounds.size.width
#define KScreenH [UIScreen mainScreen].bounds.size.height
#define margin 10
#define nickNameTest @"Johnson"
#define qrMargin 40
//目标地址
#define destinationURL @"http://u.wechat.com/EOioL-UEH2sd90q3asd3423sdas"
@interface DetailViewController ()
@property(nonatomic,weak)UIImageView *qrImageView;
@end

@implementation DetailViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor colorWithRed:228 / 255.0 green:228 / 255.0 blue:228 / 255.0 alpha:1.0];
    self.navigationItem.title = @"我的二维码";
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"capture_nav_back_normal"] style:UIBarButtonItemStylePlain target:self action:@selector(back)];
    
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"test1"] style:UIBarButtonItemStylePlain target:self action:@selector(more)];
    
   
    [self setupUI];
    
}
-(void)setupUI{
    UIView *centerView = [[UIView alloc]init];
    centerView.frame = CGRectMake(margin * 2, KScreenH * 0.18, kScreenW - 4 * margin, (kScreenW - 2 * margin)*1.3);
    //设置圆角
    centerView.layer.cornerRadius = 6;
    centerView.layer.masksToBounds = YES;
    
    centerView.backgroundColor = UIColor.whiteColor;
    [self.view addSubview:centerView];
    
    //头像
    UIImageView *iconImageView = [[UIImageView alloc]init];
    iconImageView.frame = CGRectMake(margin * 2 , margin * 2, 60, 60);
    iconImageView.image = [UIImage imageNamed:@"user"];
    [centerView addSubview:iconImageView];
    
    //昵称
    UILabel *nickLabel = [[UILabel alloc]init];
    nickLabel.text = nickNameTest;
    nickLabel.textAlignment = NSTextAlignmentLeft;
    nickLabel.font = [UIFont systemFontOfSize:20 weight:UIFontWeightBold];
    nickLabel.textColor = [UIColor blackColor];
    nickLabel.frame = CGRectMake(iconImageView.right + margin, iconImageView.top + 4, 0, 20);
    
    CGSize size = [nickNameTest sizeWithAttributes:@{
        
        NSFontAttributeName:[UIFont systemFontOfSize:20 weight:UIFontWeightBold]
    }];
    nickLabel.width = size.width;
    nickLabel.height = size.height;
    
    [centerView addSubview:nickLabel];
    
    //性别
    UIImageView *sexImageView = [[UIImageView alloc]init];
    sexImageView.image = [UIImage imageNamed:@"femal"];
    sexImageView.size = CGSizeMake(18, 18);
    sexImageView.left = nickLabel.right + 2;
    sexImageView.bottom = nickLabel.bottom - 3;
    
    [centerView addSubview:sexImageView];
    
    //地区
    UILabel *areaLabel = [[UILabel alloc]init];
    areaLabel.text = @"北京市 海淀区";
    areaLabel.textColor = UIColor.grayColor;
    areaLabel.left = nickLabel.left;
    areaLabel.top = nickLabel.bottom + 10;
    areaLabel.font = [UIFont systemFontOfSize:14];
    [areaLabel sizeToFit];
    [centerView addSubview:areaLabel];
    
    //二维码
    
    UIImageView *qrImageView = [[UIImageView alloc]init];
    
    CGFloat qrSizeWH = (kScreenW - 4 * margin) - 2 * qrMargin;
    
    UIImage *image1 = [DetailViewController creatQRImage:destinationURL withSize:qrSizeWH];
    UIImage *center = [UIImage imageNamed:@"user"];
    image1 = [self getNewImage:image1 withCenter:center];
    qrImageView.image = image1;
    qrImageView.top = iconImageView.bottom + qrMargin;
    qrImageView.left = qrMargin;
    qrImageView.size = CGSizeMake(qrSizeWH, qrSizeWH);
    
    [centerView addSubview:qrImageView];
    self.qrImageView = qrImageView;
    
    
    //提示表情
    UILabel *tipsLabel = [[UILabel alloc]init];
    tipsLabel.text = @"扫一扫上面的二维码图案,加我微信";
    tipsLabel.textColor = UIColor.grayColor;
    tipsLabel.font = [UIFont systemFontOfSize:13];
    [tipsLabel sizeToFit];
    tipsLabel.bottom =  centerView.bounds.size.height  - 20;
    tipsLabel.left = (centerView.width - tipsLabel.width) * 0.5;
    [centerView addSubview:tipsLabel];
}
-(void)back{
    [self.navigationController popViewControllerAnimated:YES];
}
-(void)more{
//    NSLog(@"%s",__func__);
    
    UIAlertController *alerVC = [UIAlertController alertControllerWithTitle:@"" message:@"保存" preferredStyle:UIAlertControllerStyleActionSheet];
    
    [alerVC addAction:[UIAlertAction actionWithTitle:@"保存" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        UIImageWriteToSavedPhotosAlbum(self.qrImageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    }]];
     
     [alerVC addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
             
     }]];
    
    [self presentViewController:alerVC animated:YES completion:nil];
}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
    if(error){
        UIAlertController *alerVC = [UIAlertController alertControllerWithTitle:@"" message:@"保存失败" preferredStyle:UIAlertControllerStyleAlert];
        
        [self presentViewController:alerVC animated:YES completion:nil];
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.2*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            
            [self dismissViewControllerAnimated:alerVC completion:nil];
        });
    }else{
        UIAlertController *alerVC = [UIAlertController alertControllerWithTitle:@"" message:@"保存成功" preferredStyle:UIAlertControllerStyleAlert];
        
        [self presentViewController:alerVC animated:YES completion:nil];
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.2*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            
            [self dismissViewControllerAnimated:alerVC completion:nil];
        });
        
    }
}

//创建一个QRImage
+(UIImage *)creatQRImage:(NSString *)url withSize:(CGFloat)size{
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    [filter setDefaults];
    NSString *string = url;
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
    [filter setValue:data forKeyPath:@"inputMessage"];
    CIImage *img= [filter outputImage];
    return [self setQRImage:img withSize:size];
}

//设置QRImage 附加大小
+(UIImage *)setQRImage:(CIImage *)image withSize:(CGFloat)size{
    CGRect extent = CGRectIntegral(image.extent);
    CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
    size_t width = CGRectGetWidth(extent) * scale;
    size_t height = CGRectGetHeight(extent) * scale;
    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
    CGContextScaleCTM(bitmapRef, scale, scale);
    CGContextDrawImage(bitmapRef, extent, bitmapImage);
    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
    CGContextRelease(bitmapRef);
    CGImageRelease(bitmapImage);
    return [UIImage imageWithCGImage:scaledImage];
}

//得到一个新的图片
-(UIImage *)getNewImage:(UIImage *)sourceImage withCenter:(UIImage *)center{
    CGSize size = sourceImage.size;
    UIGraphicsBeginImageContext(sourceImage.size);
    [sourceImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
    CGFloat width = 80,height = 80;
    CGFloat x = (size.width - width) / 2;
    CGFloat y = (size.height - height) / 2;
    [center drawInRect:CGRectMake(x, y, width, height)];
    UIImage *resultImgae = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    return resultImgae;
}
@end

posted @ 2022-01-25 10:57  johnson--save  阅读(193)  评论(0)    收藏  举报