【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】使用libqrencode庫(kù)制作二維碼電子名片-IOS版_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】使用libqrencode庫(kù)制作二維碼電子名片-IOS版_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】使用libqrencode庫(kù)制作二維碼電子名片-IOS版_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】使用libqrencode庫(kù)制作二維碼電子名片-IOS版_第4頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】使用libqrencode庫(kù)制作二維碼電子名片-IOS版_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】使用libqrencode庫(kù)制作二維碼電子名片--IOS版

1、效果圖:點(diǎn)擊生成按鈕,顯示二維碼:使用微信掃一掃后,獲得如下界面:2、libqrencode庫(kù):libqrencode是一個(gè)日本人(KentaroFukuchi)寫的生成二維碼的跨平臺(tái)c語(yǔ)言庫(kù)。官網(wǎng)是這里,Github在這里。本人最喜歡的就是這種【用c寫成的、跨平臺(tái)的、功能單一的、使用方便的】庫(kù)!IOS中Objc使用C/C++庫(kù)超方便,android下,稍微麻煩一點(diǎn)。3、Objc對(duì)libqrencode包裝:網(wǎng)上找的QRCodeGenerator類,由AndrewKopanev實(shí)現(xiàn)。很簡(jiǎn)單,就一個(gè)方法,給定一個(gè)字符串,返回一個(gè)UIImage表示的二維碼圖片:@interface

QRCodeGenerator

:

NSObject

+

(UIImage

*)qrImageForString:(NSString

*)string

p_w_picpathSize:(CGFloat)size;

@end來(lái)看一下實(shí)現(xiàn)的關(guān)鍵點(diǎn):+

(UIImage

*)qrImageForString:(NSString

*)string

p_w_picpathSize:(CGFloat)size

{

if

(![string

length])

{

return

nil;

}

//第一步:通過(guò)utf字符串生成QRCode,調(diào)用的是libqrencode的核心函數(shù)

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);

//第三步:空間變換

//因?yàn)镃oreGraphic的坐標(biāo)系是右手系,原點(diǎn)在左下角

//而UIKit中的坐標(biāo)系是左手系,原點(diǎn)在左上角

//所以經(jīng)過(guò)下面的平移和縮放矩陣操作后,就符合UIImage基于左手系左上角的表示

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];

//第五步:get

p_w_picpath

CGImageRef

qrCGImage

=

CGBitmapContextCreateImage(ctx);

UIImage

*

qrImage

=

[UIImage

p_w_picpathWithCGImage:qrCGImage];

//第六步:some

releases

CGContextRelease(ctx);

CGImageRelease(qrCGImage);

CGColorSpaceRelease(colorSpace);

QRcode_free(code);

return

qrImage;

}主要是注意一下第三步,空間變換。將右手系左下角原點(diǎn)變換到左手系統(tǒng)左上角的變換矩陣??!4、VCard格式:百度百科對(duì)VCard格式的詳細(xì)說(shuō)明我們通過(guò)一個(gè)函數(shù)了解一下常用的格式(請(qǐng)見(jiàn)代碼注釋):-(NSString*)

getVCardString

{

NSMutableString*

ret

=

[[NSMutableString

alloc]init];

//VCard規(guī)范:

//1、以BEGIN:VCARD開(kāi)頭,END:VCARD結(jié)束

[ret

appendString:@"BEGIN:VCARD

\n"];

//2、定義了很多關(guān)鍵字,具體請(qǐng)參考百度百科,本例子用到了其中一些比較重要的關(guān)鍵詞

//3、一般格式為

key

:

value,例如下面

FN:隨風(fēng)而行之青山磊落險(xiǎn)峰行

[ret

appendString:@"FN:"];

[ret

appendString:@"隨風(fēng)而行之青山磊落險(xiǎn)峰行"];

[ret

appendString:@"\n"];

//4、如果有子項(xiàng)目的話,使用;隔開(kāi),例如下面的電話TEL包含移動(dòng)電話CELL和公司電話WORK或者家庭電話HOME,而且也可以是VOICE,F(xiàn)AX等等

[ret

appendString:@"TEL;CELL;VOICE:"];

[ret

appendString:

@];

[ret

appendString:@"\n"];

[ret

appendString:@"TEL;WORK;VOICE:"];

[ret

appendString:@];

[ret

appendString:@"\n"];

//同上,EMAIL也有子項(xiàng)目

[ret

appendString:@"EMAIL;PREF;INTERNET:"];

[ret

appendString:@"47178234@"];

[ret

appendString:@"\n"];

//5、一個(gè)搞了我?guī)讉€(gè)小時(shí)的坑需要注意:,見(jiàn)到代碼中,最后都添加了"\n"符,是吧。

//

因?yàn)?/p>

如果行的長(zhǎng)度超過(guò)了75個(gè)字符,那么必須分行

//

所以

保險(xiǎn)期間,每一項(xiàng)都添加換行符

[ret

appendString:@"URL:"];

[ret

appendString:@"/jackyblf"];

[ret

appendString:@"\n"];

//6、自定義的關(guān)鍵字,使用X-開(kāi)頭,當(dāng)然也要和你手機(jī)的電話存儲(chǔ)程序兼容,否則你手機(jī)電話存儲(chǔ)程序也不認(rèn)你自定義的內(nèi)容

/*

NSString*

qq

=

@"47178234";

[ret

appendString:@"X-QQ:"];

[ret

appendString:qq];

[ret

appendString:@"\n"];

*/

[ret

appendString:@"END:VCARD"];

return

ret;

}5、IOS中生成二維碼電子名片:-

(IBAction)

forEvent:(UIEvent

*)event

{

//注:必須是正方形的UIImage

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論