ShareViewController.m 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. //
  2. // ShareViewController.m
  3. // 千模
  4. //
  5. // Created by Drew on 2018/10/25.
  6. // Copyright © 2018 MUMEI. All rights reserved.
  7. //
  8. #import "ShareViewController.h"
  9. #import "SharePopViewController.h"
  10. @interface ShareViewController ()
  11. @property (weak, nonatomic) IBOutlet UIView *qrcodeContainer;
  12. @end
  13. @implementation ShareViewController
  14. - (void)viewDidLoad {
  15. [super viewDidLoad];
  16. UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  17. btn.frame = CGRectMake(0, 0, 40, 40);
  18. UIImage *image = [[UIImage imageNamed:@"backBtn"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
  19. [btn setImage:image forState:UIControlStateNormal];
  20. btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0);
  21. btn.tintColor = [UIColor whiteColor];
  22. [btn addTarget:self action:@selector(backClick) forControlEvents:UIControlEventTouchUpInside];
  23. UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
  24. UIBarButtonItem *nagetiveSpacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
  25. nagetiveSpacer.width = -12;//这个值可以根据自己需要自己调整
  26. self.navigationItem.leftBarButtonItems = @[nagetiveSpacer, leftItem];
  27. }
  28. - (void)viewDidLayoutSubviews {
  29. [super viewWillLayoutSubviews];
  30. // gradient
  31. CAGradientLayer *gl = [CAGradientLayer layer];
  32. gl.frame = self.view.bounds;
  33. gl.startPoint = CGPointMake(0.5, 0);
  34. gl.endPoint = CGPointMake(0.5, 1);
  35. gl.colors = @[(__bridge id) [UIColor colorWithRed:251 / 255.0 green:92 / 255.0 blue:163 / 255.0 alpha:1].CGColor, (__bridge id) [UIColor colorWithRed:253 / 255.0 green:127 / 255.0 blue:141 / 255.0 alpha:1].CGColor];
  36. gl.locations = @[@(0), @(1.0f)];
  37. [self.view.layer insertSublayer:gl atIndex:0];
  38. self.qrcodeContainer.layer.cornerRadius = 12;
  39. UIImageView *qrcode = [[UIImageView alloc] initWithFrame:CGRectMake(7, 7, self.qrcodeContainer.frame.size.width - 14, self.qrcodeContainer.frame.size.width - 14)];
  40. qrcode.image = [self generateQRCod:shareUrl(@(self.type), [[NSUserDefaults standardUserDefaults] objectForKey:@"qrcode"]) withSize:qrcode.frame.size.width];
  41. [self.qrcodeContainer addSubview:qrcode];
  42. }
  43. - (UIImage*)generateQRCod:(NSString*) content withSize:(CGFloat)size {
  44. // 1.创建过滤器,这里的@"CIQRCodeGenerator"是固定的
  45. CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
  46. // 2.恢复默认设置
  47. [filter setDefaults];
  48. // 3. 给过滤器添加数据
  49. NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
  50. // 注意,这里的value必须是NSData类型
  51. [filter setValue:data forKeyPath:@"inputMessage"];
  52. // 4. 生成二维码
  53. CIImage *image = [filter outputImage];
  54. CGRect extent = CGRectIntegral(image.extent);
  55. CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
  56. // 1. 创建bitmap
  57. size_t width = CGRectGetWidth(extent) * scale;
  58. size_t height = CGRectGetHeight(extent) * scale;
  59. CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
  60. CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
  61. CIContext *context = [CIContext contextWithOptions:nil];
  62. CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
  63. CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
  64. CGContextScaleCTM(bitmapRef, scale, scale);
  65. CGContextDrawImage(bitmapRef, extent, bitmapImage);
  66. // 2.保存bitmap图片
  67. CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
  68. CGContextRelease(bitmapRef);
  69. CGImageRelease(bitmapImage);
  70. return [UIImage imageWithCGImage:scaledImage];
  71. }
  72. -(void)viewWillAppear:(BOOL)animated{
  73. [super viewWillAppear:animated];
  74. self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
  75. [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
  76. [self.navigationController.navigationBar setShadowImage:[UIImage new]];
  77. }
  78. - (void)viewWillDisappear:(BOOL)animated {
  79. [super viewWillDisappear:animated];
  80. [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
  81. [self.navigationController.navigationBar setShadowImage:nil];
  82. self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
  83. }
  84. - (void)backClick {
  85. [self.navigationController popViewControllerAnimated:YES];
  86. }
  87. - (IBAction)share:(id)sender {
  88. SharePopViewController *shareVC = [[SharePopViewController alloc] init];
  89. shareVC.type = self.type;
  90. [self presentViewController:shareVC animated:NO completion:nil];
  91. }
  92. /*
  93. #pragma mark - Navigation
  94. // In a storyboard-based application, you will often want to do a little preparation before navigation
  95. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  96. // Get the new view controller using [segue destinationViewController].
  97. // Pass the selected object to the new view controller.
  98. }
  99. */
  100. @end