在 clickButton: 方法中调用该方法:
- (IBAction)clickButton:(id)sender
{
[self generateQRCodeImage];
}
此时,运行程序,在文本框中输入内容,点击按钮就可以看到生成的二维码:

仔细的话你会发现这里的二维码比较模糊,这是由于生成的二维码尺寸较小,在imageView中显示时被拉伸导致的。下面我们就通过调整二维码的缩放来解决图像模糊的问题。
修改 generateQRCodeImage 方法中的代码如下:
- (void)generateQRCodeImage
{
...
// 获取生成的CIImage对象
self.qrcodeImage = filter.outputImage;
// 缩放CIImage对象
CGFloat scaleX = self.imageView.bounds.size.width / self.qrcodeImage.extent.size.width;
CGFloat scaleY = self.imageView.bounds.size.height / self.qrcodeImage.extent.size.height;
CIImage *transformedImage = [self.qrcodeImage imageByApplyingTransform:CGAffineTransformMakeScale(scaleX, scaleY)];
// 将调整后的CIImage对象转换成UIImage对象,并显示在图像视图中
self.imageView.image = [UIImage imageWithCIImage:transformedImage];
}
再次运行,你会看到一张清晰的二维码:

2.3.2 删除二维码图像
在这个demo中,按钮具有双重作用:即生成二维码和删除二维码。因此需要在 clickButton: 方法中先判断二维码图像是否存在:
-
如果不存在,点击按钮生成一张二维码图像,按钮的标题变为" Clear "。
如果存在,点击按钮删除二维码图像,按钮的标题变为" Generate "。
修改 clickButton: 方法中的代码如下:
- (IBAction)clickButton:(id)sender
{
if (self.qrcodeImage == nil) {
[self generateQRCodeImage];
[self.button setTitle:@"Clear" forState:UIControlStateNormal];
}
else {
[self clearQRCodeImage];
[self.button setTitle:@"Generate" forState:UIControlStateNormal];
}
}
下面我们就添加 clearQRCodeImage 方法并实现它:
- (void)clearQRCodeImage
{
self.imageView.image = nil;
self.qrcodeImage = nil;
self.textField.text = nil;
}
至此,二维码的生成和删除已基本完成,但为了有良好的体验,我们还需要考虑下面的情况:
-
在文本框未输入的情况下点击按钮是否生成二维码。
切换按钮时文本框的响应状态以及键盘出现与消失。
滑动条的显示和隐藏。










