iOS使用CIFilter生成二维码

2020-01-21 03:44:38王冬梅

于是,在 clickButton: 方法中添加下面的代码:


- (IBAction)clickButton:(id)sender
{
  if (self.qrcodeImage == nil) {
    if ([self.textField.text isEqualToString:@""]) {
      return;
    }
    [self generateQRCodeImage];
    
    [self.textField resignFirstResponder];
    [self.button setTitle:@"Clear" forState:UIControlStateNormal];
  }
  else {
    [self clearQRCodeImage];
    
    [self.button setTitle:@"Generate" forState:UIControlStateNormal];
  }
  
  self.textField.enabled = !self.textField.enabled;
  self.slider.hidden = !self.slider.hidden;
}

最后,考虑到程序启动时滑动条不应该显示(滑动条只在生成二维码时出现),还需要在 viewDidLoad 方法中设置其 hidden 属性:


- (void)viewDidLoad
{
  [super viewDidLoad];
  
  self.slider.hidden = YES;
}

可以再次运行试下。

2.3.3 缩放二维码图像

缩放显示的二维码主要是通过拖动滑动条缩放image View来完成的。在实现部分找到 changeScale: 方法,并添加代码下面的代码即可:


- (IBAction)changeScale:(id)sender
{
  self.imageView.transform = CGAffineTransformMakeScale((CGFloat)self.slider.value, (CGFloat)self.slider.value);
}

需要注意的是, self.slider.valuefloat 类型,而 CGAffineTransformMakeScale 方法的参数是 CGFloat 类型,因此在上面的代码中进行了类型转换。

2.3.4 保存二维码图像

将生成的二维码图片保存到相机胶卷相册主要是使用 UIImageWriteToSavedPhotosAlbum 函数来实现的。其完整声明如下:

 

复制代码
void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);

 

其中各参数及含义:

image :表示要保存到相册的图像。

completionTarget :可选的参数,表示图片保存后,调用完成选择器(completionSelector)的对象。

completionSelector :可选的方法,表示图片保存后,completionTarget对象要调用的方法(即回调方法)。该方法应符合以下签名:


- (void)image:(UIImage *)image
  didFinishSavingWithError:(NSError *)error
         contextInfo:(void *)contextInfo;

contextInfo :可选的参数,用于提供一个上下文信息以通过参数传递给completionSelector。

在这里我们的大致思路是:首先在imageView中添加单击手势,当用户点击二维码图像时会弹出一个提示框询问是否保存,如果用户点击保存按钮,那么就将二维码保存到相册中。下面是具体实现: