preservationView.m 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. //
  2. // preservationView.m
  3. // UniversalApp
  4. //
  5. // Created by xu on 2020/9/12.
  6. // Copyright © 2020 voidcat. All rights reserved.
  7. //
  8. #import "preservationView.h"
  9. @interface preservationView ()
  10. @property (nonatomic, strong)UIImageView *backImageView;
  11. ///头像
  12. @property (nonatomic, weak) UIImageView *headImageView;
  13. ///昵称
  14. @property (nonatomic, weak) UILabel *nameLabel;
  15. @property (nonatomic, weak) UILabel *titleLabel;
  16. ///二维码
  17. @property (nonatomic, weak) UIImageView *erImageView;
  18. @property (nonatomic, weak)UIImageView *rightImageView;
  19. @property (nonatomic, weak)UILabel *detaLabel;
  20. @end
  21. @implementation preservationView
  22. - (instancetype)initWithFrame:(CGRect)frame{
  23. if (self = [super initWithFrame:frame]) {
  24. [self loadView];
  25. }
  26. return self;
  27. }
  28. - (void)setModel:(videoListModel *)model{
  29. _model=model;
  30. [self.headImageView sd_setImageWithURL:safeurl(model.img) placeholderImage:emptyimage];
  31. self.nameLabel.text=[NSString stringWithFormat:@"@%@",model.user_nickname];
  32. self.titleLabel.text=model.title;
  33. CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
  34. // 滤镜恢复默认设置
  35. [filter setDefaults];
  36. // 2. 给滤镜添加数据
  37. NSString *string =model.video_url;
  38. NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
  39. [filter setValue:data forKeyPath:@"inputMessage"];
  40. // 3. 生成二维码
  41. CIImage *image = [filter outputImage];
  42. self.erImageView.image=[self createNonInterpolatedUIImageFormCIImage:image withSize:80];
  43. }
  44. #pragma mark - # Event Response
  45. - (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size {
  46. CGRect extent = CGRectIntegral(image.extent);
  47. CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
  48. // 1.创建bitmap;
  49. size_t width = CGRectGetWidth(extent) * scale;
  50. size_t height = CGRectGetHeight(extent) * scale;
  51. CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
  52. CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
  53. CIContext *context = [CIContext contextWithOptions:nil];
  54. CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
  55. CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
  56. CGContextScaleCTM(bitmapRef, scale, scale);
  57. CGContextDrawImage(bitmapRef, extent, bitmapImage);
  58. // 2.保存bitmap到图片
  59. CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
  60. CGContextRelease(bitmapRef);
  61. CGImageRelease(bitmapImage);
  62. //原图
  63. UIImage *outputImage = [UIImage imageWithCGImage:scaledImage];
  64. UIGraphicsBeginImageContextWithOptions(outputImage.size, NO, [[UIScreen mainScreen] scale]);
  65. [outputImage drawInRect:CGRectMake(0,0 , size, size)];
  66. //水印图
  67. UIImage *waterimage = [UIImage imageNamed:@"erweima_biao"];
  68. [waterimage drawInRect:CGRectMake((outputImage.size.height-(outputImage.size.height)*0.3)*0.5, (outputImage.size.height-(outputImage.size.height)*0.3)*0.5, (outputImage.size.height)*0.3, (outputImage.size.height)*0.3)];
  69. UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();
  70. UIGraphicsEndImageContext();
  71. return newPic;//[UIImage imageWithCGImage:scaledImage];
  72. }
  73. #pragma mark - # Life Cycle
  74. - (void)loadView {
  75. self.backImageView=[UIImageView new];
  76. self.backImageView.image=[UIImage imageNamed:@"erweimafenxiang_bac"];
  77. [self addSubview:self.backImageView];
  78. UIImageView *rightImageView=[UIImageView new];
  79. rightImageView.image=[UIImage imageNamed:@"logo_er"];
  80. [self.backImageView addSubview:rightImageView];
  81. self.rightImageView=rightImageView;
  82. UIImageView *headImageView=[UIImageView new];
  83. // headImageView.image=emptyimage;
  84. [self.backImageView addSubview:headImageView];
  85. headImageView.contentMode=UIViewContentModeScaleAspectFill;
  86. headImageView.clipsToBounds = YES;
  87. // headImageView.layer.borderWidth=3;
  88. // headImageView.layer.borderColor=RGB(153, 153, 153).CGColor;
  89. self.headImageView=headImageView;
  90. UILabel *nameLabel = [UILabel new];
  91. nameLabel.textColor = [UIColor whiteColor];
  92. [self.backImageView addSubview:nameLabel];
  93. self.nameLabel=nameLabel;
  94. UILabel *titleLabel = [UILabel new];
  95. titleLabel.textColor = [UIColor whiteColor];
  96. [self.backImageView addSubview:titleLabel];
  97. titleLabel.alpha = 0.5;
  98. self.titleLabel=titleLabel;
  99. UIImageView *erImageView=[[UIImageView alloc]init];
  100. [self.backImageView addSubview:erImageView];
  101. self.erImageView=erImageView;
  102. erImageView.userInteractionEnabled=YES;
  103. UILongPressGestureRecognizer *longPress=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(dealLongPress:)];
  104. [erImageView addGestureRecognizer:longPress];
  105. UILabel *detaLabel = [UILabel new];
  106. detaLabel.text=KGlobalVariable.appmodel.share_video_content;//@"保存照片到相册\n打开布谷交友\n立即看到";
  107. detaLabel.textColor =RGB(153, 153, 153);
  108. detaLabel.font = [UIFont systemFontOfSize:15.88 weight:UIFontWeightMedium];
  109. [self.backImageView addSubview:detaLabel];
  110. detaLabel.numberOfLines=0;
  111. self.detaLabel=detaLabel;
  112. #pragma mark - # Private Methods
  113. [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) {
  114. make.edges.mas_equalTo(self);
  115. }];
  116. }
  117. #pragma mark->长按识别二维码
  118. -(void)dealLongPress:(UIGestureRecognizer*)pressSender{
  119. NSString *content = @"" ;
  120. //取出选中的图片
  121. UIImageView*tempImageView=(UIImageView*)pressSender.view;
  122. if(tempImageView.image){
  123. UIImage *pickImage =tempImageView.image;
  124. NSData *imageData = UIImagePNGRepresentation(pickImage);
  125. CIImage *ciImage = [CIImage imageWithData:imageData];
  126. //创建探测器
  127. CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy: CIDetectorAccuracyLow}];
  128. NSArray *feature = [detector featuresInImage:ciImage];
  129. //取出探测到的数据
  130. for (CIQRCodeFeature *result in feature) {
  131. content = result.messageString;
  132. [[UIApplication sharedApplication] openURL: [NSURL URLWithString:content] options: @{} completionHandler: nil];
  133. }
  134. //进行处理(音效、网址分析、页面跳转等)
  135. }
  136. }
  137. - (void)setIs_Small:(BOOL)is_Small{
  138. _is_Small=is_Small;
  139. if (is_Small==YES) {
  140. self.nameLabel.font = [UIFont systemFontOfSize:13 weight:UIFontWeightMedium];
  141. self.titleLabel.font = [UIFont systemFontOfSize:11 weight:UIFontWeightMedium];
  142. self.detaLabel.font = [UIFont systemFontOfSize:10 weight:UIFontWeightMedium];
  143. [self.rightImageView mas_makeConstraints:^(MASConstraintMaker *make) {
  144. make.left.mas_equalTo(30);
  145. make.top.mas_equalTo(15);
  146. make.height.mas_equalTo(20);
  147. make.width.mas_equalTo(132.5/(33.5/20));
  148. }];
  149. [self.headImageView mas_makeConstraints:^(MASConstraintMaker *make) {
  150. make.width.height.mas_equalTo(145);
  151. make.top.mas_equalTo(self.rightImageView.mas_bottom).mas_offset(15);
  152. make.centerX.mas_equalTo(self);
  153. }];
  154. ViewRadius(self.headImageView, 8);
  155. [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
  156. make.height.mas_equalTo(13);
  157. make.top.mas_equalTo(self.headImageView.mas_bottom).mas_offset(15);
  158. make.left.mas_equalTo(self.headImageView);
  159. }];
  160. [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
  161. make.top.mas_equalTo(self.nameLabel.mas_bottom).mas_offset(5);
  162. make.left.mas_equalTo(self.headImageView);
  163. make.width.mas_equalTo(145);
  164. }];
  165. [self.erImageView mas_makeConstraints:^(MASConstraintMaker *make) {
  166. make.left.mas_equalTo(self.headImageView).mas_offset(145/2-53);
  167. make.width.height.mas_equalTo(53);
  168. make.bottom.mas_equalTo(-15);
  169. }];
  170. [self.detaLabel mas_makeConstraints:^(MASConstraintMaker *make) {
  171. make.centerY.mas_equalTo(self.erImageView);
  172. make.left.mas_equalTo(self.erImageView.mas_right).mas_offset(10);
  173. make.right.mas_equalTo(self.headImageView.mas_right);
  174. }];
  175. ViewRadius(self, 8);
  176. }else{
  177. self.nameLabel.font = [UIFont systemFontOfSize:20 weight:UIFontWeightMedium];
  178. self.titleLabel.font = [UIFont systemFontOfSize:17 weight:UIFontWeightMedium];
  179. self.detaLabel.font = [UIFont systemFontOfSize:15.88 weight:UIFontWeightMedium];
  180. [self.rightImageView mas_makeConstraints:^(MASConstraintMaker *make) {
  181. make.left.mas_equalTo(50);
  182. make.top.mas_equalTo(20+kStatusBarHeight);
  183. make.height.mas_equalTo(33.5);
  184. }];
  185. [self.headImageView mas_makeConstraints:^(MASConstraintMaker *make) {
  186. make.width.height.mas_equalTo(250);
  187. make.top.mas_equalTo(132-20+kStatusBarHeight);
  188. make.centerX.mas_equalTo(self);
  189. }];
  190. ViewRadius(self.headImageView, 8);
  191. [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
  192. make.height.mas_equalTo(20);
  193. make.top.mas_equalTo(self.headImageView.mas_bottom).mas_offset(30);
  194. make.left.mas_equalTo(60);
  195. }];
  196. [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
  197. make.top.mas_equalTo(self.nameLabel.mas_bottom).mas_offset(15);
  198. make.left.mas_equalTo(60);
  199. make.right.mas_equalTo(-60);
  200. }];
  201. [self.erImageView mas_makeConstraints:^(MASConstraintMaker *make) {
  202. make.left.mas_equalTo(85);
  203. make.width.height.mas_equalTo(78);
  204. make.bottom.mas_equalTo(-45-kTabBarHeight1);
  205. }];
  206. [self.detaLabel mas_makeConstraints:^(MASConstraintMaker *make) {
  207. make.centerY.mas_equalTo(self.erImageView);
  208. // make.top.mas_equalTo(self.titleLabel.mas_bottom).mas_offset(90);
  209. make.left.mas_equalTo(180);
  210. make.right.mas_equalTo(self.headImageView.mas_right);
  211. }];
  212. }
  213. }
  214. #pragma mark - # Getter
  215. @end