美文网首页
iOS UIVisualEffectView 用在cell上面

iOS UIVisualEffectView 用在cell上面

作者: jemmy_xl | 来源:发表于2020-09-26 17:14 被阅读0次

    底部是一个imageView
    UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur];

    使用 imageWithUIView 进行获取图片就不会出现闪动(前提要设置 : imageView.contentMode = UIViewContentModeScaleAspectFill )

    // 图片裁剪
                UIImageView *imageView = [UIImageView new];
                imageView.bounds = self.iconBGImageView.bounds;
                imageView.center = CGPointMake(-1000, 0);
                [self addSubview:imageView];
                imageView.image = image;
                imageView.contentMode = UIViewContentModeScaleAspectFill;
                imageView.clipsToBounds = YES;
    
                UIImage *image2 = [self imageWithUIView:imageView];
                [imageView removeFromSuperview];
                self.iconBGImageView.image = [self changeImage:image];
                self.iconBGImageView.contentMode = UIViewContentModeScaleAspectFill;
                self.iconBGImageView.clipsToBounds = YES;
    
    • (UIImage) imageWithUIView:(UIView) view{
      // 创建一个bitmap的context
      // 并把它设置成为当前正在使用的context
      UIGraphicsBeginImageContext(view.bounds.size);
      CGContextRef currnetContext = UIGraphicsGetCurrentContext();
      [view.layer renderInContext:currnetContext];
      // 从当前context中创建一个改变大小后的图片
      UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
      // 使当前的context出堆栈
      UIGraphicsEndImageContext();
      return image;
      }

    • (UIImage *)changeImage:(UIImage *)image {
      UIGraphicsBeginImageContext(self.iconBGImageView.size);
      CGRect rect = self.iconBGImageView.bounds;
      [image drawInRect:rect];
      使用下面的就可以
      // [image drawInRect:rect withContentMode:UIViewContentModeScaleAspectFill clipsToBounds:YES];
      UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
      UIGraphicsEndImageContext();
      // 拉伸不变形
      UIImage *networkImage = [newImage stretchableImageWithLeftCapWidth:newImage.size.width * 0.5
      topCapHeight:0];
      UIGraphicsEndImageContext();
      return newImage;
      }

    解决思路: 将图片平铺处理,不能压缩。就可以 UIViewContentModeScaleAspectFill

    相关文章

      网友评论

          本文标题:iOS UIVisualEffectView 用在cell上面

          本文链接:https://www.haomeiwen.com/subject/sezcuktx.html