苹果手机自带浏览器会自带Qrcod

iphone qrcode是什么意思_百度知道
iphone qrcode是什么意思
我有更好的答案
QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。
采纳率:38%
为您推荐:
其他类似问题
qrcode的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。求问这个qrcode为什么会这样显示,而且还删不掉【iphone8吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:181,361贴子:
求问这个qrcode为什么会这收藏
求问这个qrcode为什么会这样显示,而且还删不掉
[国美]3C数码,超值低价,时尚潮机,热门机型,人气大卖,火热抢购.国美,全场超低价,3C数码,选国美,品牌潮机,优惠购时尚!
求壁纸可以吗lz………谢谢
这么多人都遇到这样的问题吗。,和我一块买8P的哪个人是64G的就没事,我256G的就出这个了!
我也这样 楼主找到原因了吗
我的8 64G也是这样 强迫症很烦躁
小8没有这个东西…
我也有 iTunes重刷的
那一年,他用6000元买苹果5,而我用6000元摆地摊。一年后,他用6000元买苹果5s,而我有了6万元,开了家小店。两年后,他用6000元买苹果6,而我有了自己的公司。三年后,他用6000元买苹果7,而我有车有房有存款。如今,他又准备6000元买苹果8,而我,四处躲债,亡命天涯。
登录百度帐号新到的iphone8p主屏幕的QRcode是什么鬼?_iphone8吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:181,361贴子:
新到的iphone8p主屏幕的QRcode是什么鬼?收藏
如图,QRcode是二维码的什么的意思吧?这个是什么东西?删也删不掉,打开就闪退
[国美]3C数码,超值低价,时尚潮机,热门机型,人气大卖,火热抢购.国美,全场超低价,3C数码,选国美,品牌潮机,优惠购时尚!
好像是说有个直接扫描二维码的功能
我也是这样,你解决了吗
我也是,到底咋解决的?楼主,你的好了吗?
???为什么我没有这个,同8P
有解决的吗
这是个什么玩意,我的怎么没有
我的8P也有,删不掉,打不开,我把它放在一堆不用的文件夹里
哪买的,自带只有7个程序的
「天猫手机馆」-正品手机品牌旗舰店直销,新品现货,品类齐全,售后无忧,正品低价服务优!网购手机,来「天猫手机馆」让人放心的手机商城.&&惠&&聚各款热卖机型!分期付款无压力!
楼主解决了吗?
不是国行吧
可以从app store里重新下载,我的也是这样,但是下载很慢
登录百度帐号QRCode-二维码识别与生成 - IOS - 伯乐在线
& QRCode-二维码识别与生成
有关二维码的介绍,我这里不做过多说明, 可以直接去基维百科查看,附上链接.
IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是和,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。
官方提供的接口非常简单,直接看代码,主要使用的是AVFoundation。
Objective-C
@interface ViewController ()AVCaptureMetadataOutputObjectsDelegate&//用于处理采集信息的代理
AVCaptureSession *//输入输出的中间桥梁
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//获取摄像设备
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//创建输入流
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
if (!input)
//创建输出流
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
//设置代理 在主线程里刷新
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//设置有效扫描区域
CGRect scanCrop=[self getScanCrop:_scanWindow.bounds readerViewBounds:self.view.frame];
output.rectOfInterest = scanC
//初始化链接对象
_session = [[AVCaptureSession alloc]init];
//高质量采集率
[_session setSessionPreset:AVCaptureSessionPresetHigh];
[_session addInput:input];
[_session addOutput:output];
//设置扫码支持的编码格式(如下设置条形码和二维码兼容)
output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
layer.videoGravity=AVLayerVideoGravityResizeAspectF
layer.frame=self.view.layer.
[self.view.layer insertSublayer:layer atIndex:0];
//开始捕获
[_session startRunning];
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
if (metadataObjects.count&0) {
//[session stopRunning];
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];
//输出扫描字符串
NSLog(@"%@",metadataObject.stringValue);
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
@interface ViewController ()AVCaptureMetadataOutputObjectsDelegate&//用于处理采集信息的代理{&&&&AVCaptureSession * session;//输入输出的中间桥梁}@end@implementation ViewController - (void)viewDidLoad {&&&&[super viewDidLoad];&&&&// Do any additional setup after loading the view, typically from a nib.&&&&//获取摄像设备&&&&AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];&&&&//创建输入流&&&&AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];&&&&if (!input) return;&&&&//创建输出流&&&&AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];&&&&//设置代理 在主线程里刷新&&&&[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];&&&&//设置有效扫描区域&&&&CGRect scanCrop=[self getScanCrop:_scanWindow.bounds readerViewBounds:self.view.frame];&&&& output.rectOfInterest = scanCrop;&&&&//初始化链接对象&&&&_session = [[AVCaptureSession alloc]init];&&&&//高质量采集率&&&&[_session setSessionPreset:AVCaptureSessionPresetHigh];&&&&&&&&[_session addInput:input];&&&&[_session addOutput:output];&&&&//设置扫码支持的编码格式(如下设置条形码和二维码兼容)&&&&output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];&&&&&&&&AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:_session];&&&&layer.videoGravity=AVLayerVideoGravityResizeAspectFill;&&&&layer.frame=self.view.layer.bounds;&&&&[self.view.layer insertSublayer:layer atIndex:0];&&&&//开始捕获&&&&[_session startRunning];}&-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{&&&&if (metadataObjects.count&0) {&&&&&&&&//[session stopRunning];&&&&&&&&AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];&&&&&&&&//输出扫描字符串&&&&&&&&NSLog(@"%@",metadataObject.stringValue);&&&&}}
一些初始化的代码加上实现代理方法便完成了二维码扫描的工作,这里我们需要注意的是, 在二维码扫描的时候, 我们一般都会在屏幕中间放一个方框,用来显示二维码扫描的大小区间,这里我们在个AVCaptureMetadataOutput类中有一个rectOfInterest属性,它的作用就是设置扫描范围。
这个CGRect参数和普通的Rect范围不太一样,它的四个值的范围都是0-1,表示比例。
rectOfInterest都是按照横屏来计算的 所以当竖屏的情况下 x轴和y轴要交换一下。
宽度和高度设置的情况也是类似。
我们在上面设置有效扫描区域的方法如下
Objective-C
#pragma mark-& 获取扫描区域的比例关系
-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds
CGFloat x,y,width,
x = (CGRectGetHeight(readerViewBounds)-CGRectGetHeight(rect))/2/CGRectGetHeight(readerViewBounds);
y = (CGRectGetWidth(readerViewBounds)-CGRectGetWidth(rect))/2/CGRectGetWidth(readerViewBounds);
width = CGRectGetHeight(rect)/CGRectGetHeight(readerViewBounds);
height = CGRectGetWidth(rect)/CGRectGetWidth(readerViewBounds);
return CGRectMake(x, y, width, height);
<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b
#pragma mark-& 获取扫描区域的比例关系-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds{&&&&&&&&CGFloat x,y,width,height;&&&&&&&&x = (CGRectGetHeight(readerViewBounds)-CGRectGetHeight(rect))/2/CGRectGetHeight(readerViewBounds);&&&&y = (CGRectGetWidth(readerViewBounds)-CGRectGetWidth(rect))/2/CGRectGetWidth(readerViewBounds);&&&&width = CGRectGetHeight(rect)/CGRectGetHeight(readerViewBounds);&&&&height = CGRectGetWidth(rect)/CGRectGetWidth(readerViewBounds);&&&&&&&&return CGRectMake(x, y, width, height);&&&&}
读取主要用到CoreImage 不过要强调的是读取二维码的功能只有在iOS8之后才支持,我们需要在相册中调用一个二维码,将其读取,代码如下
Objective-C
#pragma mark-& 我的相册
-(void)myAlbum{
NSLog(@"我的相册");
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){
//1.初始化相册拾取器
UIImagePickerController *controller = [[UIImagePickerController alloc] init];
//2.设置代理
controller.delegate =
//3.设置资源:
UIImagePickerControllerSourceTypePhotoLibrary,相册
UIImagePickerControllerSourceTypeCamera,相机
UIImagePickerControllerSourceTypeSavedPhotosAlbum,照片库
controller.sourceType = UIImagePickerControllerSourceTypeSavedPhotosA
//4.随便给他一个转场动画
controller.modalTransitionStyle=UIModalTransitionStyleFlipH
[self presentViewController:controller animated:YES completion:NULL];
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"设备不支持访问相册,请在设置-&隐私-&照片中进行设置!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alert show];
123456789101112131415161718192021222324252627
#pragma mark-& 我的相册-(void)myAlbum{&&&&&&&&NSLog(@"我的相册");&&&&if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){&&&&&&&&//1.初始化相册拾取器&&&&&&&&UIImagePickerController *controller = [[UIImagePickerController alloc] init];&&&&&&&&//2.设置代理&&&&&&&&controller.delegate = self;&&&&&&&&//3.设置资源:&&&&&&&&/**&&&&&&&& UIImagePickerControllerSourceTypePhotoLibrary,相册&&&&&&&& UIImagePickerControllerSourceTypeCamera,相机&&&&&&&& UIImagePickerControllerSourceTypeSavedPhotosAlbum,照片库&&&&&&&& */&&&&&&&&controller.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;&&&&&&&&//4.随便给他一个转场动画&&&&&&&&controller.modalTransitionStyle=UIModalTransitionStyleFlipHorizontal;&&&&&&&&[self presentViewController:controller animated:YES completion:NULL];&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"设备不支持访问相册,请在设置-&隐私-&照片中进行设置!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];&&&&&&&&[alert show];&&&&}&&&&}
完成相册代理, 我们在代理中添加读取二维码方法
Objective-C
#pragma mark-& imagePickerController delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
//1.获取选择的图片
UIImage *image = info[UIImagePickerControllerOriginalImage];
//2.初始化一个监测器
CIDetector*detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyHigh }];
[picker dismissViewControllerAnimated:YES completion:^{
//监测到的结果数组
NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];
if (features.count &=1) {
/**结果对象 */
CIQRCodeFeature *feature = [features objectAtIndex:0];
NSString *scannedResult = feature.messageS
UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"扫描结果" message:scannedResult delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show];
UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"该图片没有包含一个二维码!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show];
<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b
#pragma mark-& imagePickerController delegate- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{&&&&//1.获取选择的图片&&&&UIImage *image = info[UIImagePickerControllerOriginalImage];&&&&//2.初始化一个监测器&&&&CIDetector*detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyHigh }];&&&&&&&&[picker dismissViewControllerAnimated:YES completion:^{&&&&&&&&//监测到的结果数组&&&&&&&&NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];&&&&&&&&if (features.count &=1) {&&&&&&&&&&&&/**结果对象 */&&&&&&&&&&&&CIQRCodeFeature *feature = [features objectAtIndex:0];&&&&&&&&&&&&NSString *scannedResult = feature.messageString;&&&&&&&&&&&&UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"扫描结果" message:scannedResult delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];&&&&&&&&&&&&[alertView show];&&&&&&&&&&&&&&&&&&}&&&&&&&&else{&&&&&&&&&&&&UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"该图片没有包含一个二维码!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];&&&&&&&&&&&&[alertView show];&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&}];&&&&&&&&}
因为没用真机,所以这里没有给出太多的截图, 用模拟器读取自带图片,结果如下
生成二维码,其实也是用到CoreImage,但是步骤繁琐一些,代码如下
Objective-C
#pragma mark-& 二维码生成
-(void)create{
UIImage *image=[UIImage imageNamed:@"_thumb.jpg"];
NSString*tempS
if(self.textField.text.length==0){
tempStr=@"ddddddddd";
tempStr=self.textField.
UIImage*tempImage=[QRCodeGenerator qrImageForString:tempStr imageSize:360 Topimg:image withColor:RandomColor];
_outImageView.image=tempI
+(UIImage*)qrImageForString:(NSString *)string imageSize:(CGFloat)size Topimg:(UIImage *)topimg withColor:(UIColor*)color{
if (![string length]) {
QRcode *code = QRcode_encodeString([string UTF8String], 0, QR_ECLEVEL_L, QR_MODE_8, 1);
if (!code) {
// create context
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(0, size, size, 8, size * 4, colorSpace, kCGImageAlphaPremultipliedLast);
CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(0, -size);
CGAffineTransform scaleTransform = CGAffineTransformMakeScale(1, -1);
CGContextConcatCTM(ctx, CGAffineTransformConcat(translateTransform, scaleTransform));
// draw QR on this context
[QRCodeGenerator drawQRCode:code context:ctx size:size withPointType:0 withPositionType:0 withColor:color];
// get image
CGImageRef qrCGImage = CGBitmapContextCreateImage(ctx);
UIImage * qrImage = [UIImage imageWithCGImage:qrCGImage];
if(topimg)
UIGraphicsBeginImageContext(qrImage.size);
//Draw image2
[qrImage drawInRect:CGRectMake(0, 0, qrImage.size.width, qrImage.size.height)];
//Draw image1
float r=qrImage.size.width*35/240;
[topimg drawInRect:CGRectMake((qrImage.size.width-r)/2, (qrImage.size.height-r)/2 ,r, r)];
qrImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// some releases
CGContextRelease(ctx);
CGImageRelease(qrCGImage);
CGColorSpaceRelease(colorSpace);
QRcode_free(code);
return qrI
+ (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size withPointType:(QRPointType)pointType withPositionType:(QRPositionType)positionType withColor:(UIColor *)color {
unsigned char *data = 0;
data = code-&
width = code-&
float zoom = (double)size / (code-&width + 2.0 * qr_margin);
CGRect rectDraw = CGRectMake(0, 0, zoom, zoom);
const CGFloat *
if (color) {
components = CGColorGetComponents(color.CGColor);
components = CGColorGetComponents([UIColor blackColor].CGColor);
CGContextSetRGBFillColor(ctx, components[0], components[1], components[2], 1.0);
NSLog(@"aad :%f
ccd:%f",components[0],components[1],components[2]);
for(int i = 0; i
for(int j = 0; j
if(*data & 1) {
rectDraw.origin = CGPointMake((j + qr_margin) * zoom,(i + qr_margin) * zoom);
if (positionType == QRPositionNormal) {
switch (pointType) {
case QRPointRect:
CGContextAddRect(ctx, rectDraw);
case QRPointRound:
CGContextAddEllipseInRect(ctx, rectDraw);
}else if(positionType == QRPositionRound) {
switch (pointType) {
case QRPointRect:
CGContextAddRect(ctx, rectDraw);
case QRPointRound:
if ((i&=0 && i6 && j&=0 && j6) || (i&=0 && i6 && j&=width-7-1 && j-1) || (i&=width-7-1 && i-1 && j&=0 && j6)) {
CGContextAddRect(ctx, rectDraw);
CGContextAddEllipseInRect(ctx, rectDraw);
CGContextFillPath(ctx);
<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b<div class="crayon-num" data-line="crayon-5b411b<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b0<div class="crayon-num" data-line="crayon-5b411b1<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b2<div class="crayon-num" data-line="crayon-5b411b3<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b4<div class="crayon-num" data-line="crayon-5b411b5<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b6<div class="crayon-num" data-line="crayon-5b411b7<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b8<div class="crayon-num" data-line="crayon-5b411b9<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b0<div class="crayon-num" data-line="crayon-5b411b1<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b2<div class="crayon-num" data-line="crayon-5b411b3<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b4<div class="crayon-num" data-line="crayon-5b411b5<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b6<div class="crayon-num" data-line="crayon-5b411b7<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b8<div class="crayon-num" data-line="crayon-5b411b9<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b0<div class="crayon-num" data-line="crayon-5b411b1<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b2<div class="crayon-num" data-line="crayon-5b411b3<div class="crayon-num crayon-striped-num" data-line="crayon-5b411b4<div class="crayon-num" data-line="crayon-5b411b5
#pragma mark-& 二维码生成-(void)create{&&&&&&&&UIImage *image=[UIImage imageNamed:@"_thumb.jpg"];&&&&NSString*tempStr;&&&&if(self.textField.text.length==0){&&&&&&&&&&&&&&&&tempStr=@"ddddddddd";&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&tempStr=self.textField.text;&&&&&&&&&&&&}&&&&UIImage*tempImage=[QRCodeGenerator qrImageForString:tempStr imageSize:360 Topimg:image withColor:RandomColor];&&&&&&&&_outImageView.image=tempImage;&&&&}+(UIImage*)qrImageForString:(NSString *)string imageSize:(CGFloat)size Topimg:(UIImage *)topimg withColor:(UIColor*)color{&&&&&&&&if (![string length]) {&&&&&&&&return nil;&&&&}&&&&&&&&QRcode *code = QRcode_encodeString([string UTF8String], 0, QR_ECLEVEL_L, QR_MODE_8, 1);&&&&if (!code) {&&&&&&&&return nil;&&&&}&&&&&&&&// create context&&&&CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();&&&&CGContextRef ctx = CGBitmapContextCreate(0, size, size, 8, size * 4, colorSpace, kCGImageAlphaPremultipliedLast);&&&&&&&&CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(0, -size);&&&&CGAffineTransform scaleTransform = CGAffineTransformMakeScale(1, -1);&&&&CGContextConcatCTM(ctx, CGAffineTransformConcat(translateTransform, scaleTransform));&&&&&&&&// draw QR on this context&&&&[QRCodeGenerator drawQRCode:code context:ctx size:size withPointType:0 withPositionType:0 withColor:color];&&&&&&&&// get image&&&&CGImageRef qrCGImage = CGBitmapContextCreateImage(ctx);&&&&UIImage * qrImage = [UIImage imageWithCGImage:qrCGImage];&&&&&&&&if(topimg)&&&&{&&&&&&&&UIGraphicsBeginImageContext(qrImage.size);&&&&&&&&&&&&&&&&//Draw image2&&&&&&&&[qrImage drawInRect:CGRectMake(0, 0, qrImage.size.width, qrImage.size.height)];&&&&&&&&&&&&&&&&//Draw image1&&&&&&&&float r=qrImage.size.width*35/240;&&&&&&&&[topimg drawInRect:CGRectMake((qrImage.size.width-r)/2, (qrImage.size.height-r)/2 ,r, r)];&&&&&&&&&qrImage=UIGraphicsGetImageFromCurrentImageContext();&&&&&&&&&&&&&&&&UIGraphicsEndImageContext();&&&&}&&&&&// some releases&&&&CGContextRelease(ctx);&&&&CGImageRelease(qrCGImage);&&&&CGColorSpaceRelease(colorSpace);&&&&QRcode_free(code);&&&&&&&&return qrImage;&&&&&&}+ (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size withPointType:(QRPointType)pointType withPositionType:(QRPositionType)positionType withColor:(UIColor *)color { unsigned char *data = 0; int width; data = code-&data; width = code-&width; float zoom = (double)size / (code-&width + 2.0 * qr_margin); CGRect rectDraw = CGRectMake(0, 0, zoom, zoom);&&&& // draw&&&&const CGFloat *components;&&&&if (color) {&&&&&&&&components = CGColorGetComponents(color.CGColor);&&&&}else {&&&&&&&&components = CGColorGetComponents([UIColor blackColor].CGColor);&&&&}&&&&CGContextSetRGBFillColor(ctx, components[0], components[1], components[2], 1.0);&&&&NSLog(@"aad :%f&&bbd :%f&& ccd:%f",components[0],components[1],components[2]);
for(int i = 0; i
for(int j = 0; j
if(*data & 1) {
rectDraw.origin = CGPointMake((j + qr_margin) * zoom,(i + qr_margin) * zoom);&&&&&&&&&&&&&&&&if (positionType == QRPositionNormal) {&&&&&&&&&&&&&&&&&&&&switch (pointType) {&&&&&&&&&&&&&&&&&&&&&&&&case QRPointRect:&&&&&&&&&&&&&&&&&&&&&&&&&&&&CGContextAddRect(ctx, rectDraw);&&&&&&&&&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&&&&&case QRPointRound:&&&&&&&&&&&&&&&&&&&&&&&&&&&&CGContextAddEllipseInRect(ctx, rectDraw);&&&&&&&&&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&&&&&default:&&&&&&&&&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&}else if(positionType == QRPositionRound) {&&&&&&&&&&&&&&&&&&&&switch (pointType) {&&&&&&&&&&&&&&&&&&&&&&&&case QRPointRect:&&&&&&&&&&&&&&&&&&&&&&&&&&&&CGContextAddRect(ctx, rectDraw);&&&&&&&&&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&&&&&case QRPointRound:&&&&&&&&&&&&&&&&&&&&&&&&&&&&if ((i&=0 && i6 && j&=0 && j6) || (i&=0 && i6 && j&=width-7-1 && j-1) || (i&=width-7-1 && i-1 && j&=0 && j6)) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&CGContextAddRect(ctx, rectDraw);&&&&&&&&&&&&&&&&&&&&&&&&&&&&}else {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&CGContextAddEllipseInRect(ctx, rectDraw);&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&&&&&default:&&&&&&&&&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&}
} } CGContextFillPath(ctx);}
在textField输入,生成下图
长按二维码识别
这个功能有很多的地方在用, 最让人熟知的我想便是微信了,其实实现方法还是很简单的。
Objective-C
#pragma mark-& 长按识别二维码
-(void)dealLongPress:(UIGestureRecognizer*)gesture{
if(gesture.state==UIGestureRecognizerStateBegan){
_timer.fireDate=[NSDate distantFuture];
UIImageView*tempImageView=(UIImageView*)gesture.
if(tempImageView.image){
//1. 初始化扫描仪,设置设别类型和识别质量
CIDetector*detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyHigh }];
//2. 扫描获取的特征组
NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:tempImageView.image.CGImage]];
//3. 获取扫描结果
CIQRCodeFeature *feature = [features objectAtIndex:0];
NSString *scannedResult = feature.messageS
UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"扫描结果" message:scannedResult delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show];
UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"扫描结果" message:@"您还没有生成二维码" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show];
}else if (gesture.state==UIGestureRecognizerStateEnded){
_timer.fireDate=[NSDate distantPast];
123456789101112131415161718192021222324252627282930313233
#pragma mark-& 长按识别二维码-(void)dealLongPress:(UIGestureRecognizer*)gesture{&&&&&&&&if(gesture.state==UIGestureRecognizerStateBegan){&&&&&&&&&&&&&&&&_timer.fireDate=[NSDate distantFuture];&&&&&&&&&&&&&&&&UIImageView*tempImageView=(UIImageView*)gesture.view;&&&&&&&&if(tempImageView.image){&&&&&&&&&&&&//1. 初始化扫描仪,设置设别类型和识别质量&&&&&&&&&&&&CIDetector*detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyHigh }];&&&&&&&&&&&&//2. 扫描获取的特征组&&&&&&&&&&&&NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:tempImageView.image.CGImage]];&&&&&&&&&&&&//3. 获取扫描结果&&&&&&&&&&&&CIQRCodeFeature *feature = [features objectAtIndex:0];&&&&&&&&&&&&NSString *scannedResult = feature.messageString;&&&&&&&&&&&&UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"扫描结果" message:scannedResult delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];&&&&&&&&&&&&[alertView show];&&&&&&&&}else {&&&&&&&&&&&&&&&&&&&&&&&&UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"扫描结果" message:@"您还没有生成二维码" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];&&&&&&&&&&&&[alertView show];&&&&&&&&}&&&&&&&&&&&&&&&&&&&&}else if (gesture.state==UIGestureRecognizerStateEnded){&&&&&&&&&&&&&&&&&&&&&&&&_timer.fireDate=[NSDate distantPast];&&&&}&&&&&&&&}
我们用刚才生成的二维码进行长按识别,效果如下
本文demo下载地址请点这里,
转自所写的仿支付宝二维码。
系统原生的二维码扫描扫描识别速度,要比第三方好用得多,在没有特殊原因的情况下,比如7.0系统以下,我希望大家都能用系统原生的方法。
文章若有问题请给予指正,感谢。}

我要回帖

更多关于 苹果手机自带吉他软件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信