2025-05-17



vcD4KPHA+Crb+zqzC673pydyjujwvcD4KPHA+Cjxicj4KPC9wPgo8cD62/s6swuujqFFSKFF1aWNrIFJlc3BvbnNlKWNvZGWjqaOs09azxrb+zqzM9cLro6zX7tTnxvDUtNPayNWxvqGjPC9wPgo8cD4Ky/zKx9PDzNi2qLXEvLi6zs280M6wtNK7tqi55sLJ1NrGvcPmo6i2/s6st73P8qOpyc+31rK8tcS62rDXz+C85LXEzbzQzqOsysfL+dPQ0MXPosr9vt21xNK7sNHUv7PXoaM8L3A+CjxwPgq2/s6swuvKx9K71taxyNK7zqzC67j8uN+8trXEzPXC6yYjMjY2ODQ7yr2ho9K7zqzC69a7xNzU2tK7uPa3vc/yo6jSu7DjysfLrsa9t73P8qOpyc+x7bTv0MXPoqOsPC9wPgo8cD4Ktvi2/s6swuvU2suuxr26zbS51rG3vc/ytry/ydLUtOa0otDFz6Kho9K7zqzC69a7xNzTycr919a6zdfWxLjX6bPJo6y2+Lb+zqzC68TctOa0orq619ahosr919a6zc28xqy1yNDFz6KjrDwvcD4KPHA+CtLytMu2/s6swuu1xNOm08PB7NPy0qq547XDtuChozwvcD4KPHA+Cjxicj4KPC9wPgo8cD4Ktv7OrMLr0OjH86O6PC9wPgo8cD4KPGJyPgo8L3A+CjxwPgq/qrei0ru/7rb+zqzC68mow+iy5bz+o6y+39PQyajD6LTz1tq2/s6swuu1xMTcwaajrMTcubvKtrHwtv7OrMLrtbHW0LD8uqy1xM340rPBtL3T0tS8sM7Esb7Qxc+ioaO21M340rPBtL3TzPjXqnNhZmFyaeSvwMDG96OotavKx7bU19S8urmry761xMGsvdPSqsfz1NphcHDE2rK/xNrWw+SvwMDG96OpoaO21Mmow+i1xMTayN21r7P2zOHKvr/yoaOyosfSyMOx8LXEYXBwyajD6M7Sw8fX1Ly6tcS2/s6swuu1xMqxuvLSqsz416q1vWFwcHN0b3Jlz8LU2KGjPC9wPgo8cD4KPGJyPgo8L3A+CjxwPgrQ6MfzyLfIz6O6PC9wPgo8cD4Ktv7OrMLry+O3qNfUvLrQtKO/srvP1sq1oaO/qrei1tzG2syrs6SjrMTHvs3KudPDtdrI/be9xMe49r/iUVIoUXVpY2sgUmVzcG9uc2UpY29kZSAgWkJhclNES6OstsHIodDFz6K1xMqxuvLK18/I06a4w8XQts/Kx7K7ysfN+NKzway906Osv7zCx9PD1f3U8rHttO/KvbbUyajD6LXEveG5+7340NC5/cLLoaO21NPaxNrWw+SvwMDG98q508Mgd2Vidmlld7/YvP6ho7Wvs/bM4cq+v/LKudPDVUlBbGVydFZpZXfMq8Lpt7OjrLb4x9Kyu7rD08OjrMv50tSyydPDv6rUtLXayP23vb/iCiBCbG9ja0FsZXJ0QWN0aW9uU2hlZXSjrEJsb2NrQWxlcnRBY3Rpb25TaGVldMq508NibG9ja9f2tcTSu7/uvt/T0Mzhyr65psTcwOAmIzIwMjg0O1VJQWxlcnRWaWV3ICBVSUFjdGlvblNoZWV0tci/2Lz+oaO63Me/tPOjrLrcyrXTw6GjPC9wPgo8cD4KPGJyPgo8L3A+CjxwPgq2/s6swuu/qreio7o8L3A+CjxwPgo8YnI+CjwvcD4KPHA+ytfPyNTaZ2l0aHViyc/PwtTYWkJhciBTREs8L3A+CjxwPrXY1rdodHRwczovL2dpdGh1Yi5jb20vYm1vcnRvbi9aQmFyU0RLPC9wPgo8cD4KPGJyPgo8L3A+CjxwPs/C1NhCbG9ja0FsZXJ0QWN0aW9uU2hlZXQsPC9wPgo8cD7Qwr2o0ru49nRlc3S5pLPMoaPU2k1haW6ht3N0b3J5Ym9hcmTJz83Pt8XSu7j2YnV0dG9uteO792J1dHRvbr+qyrzJqMPooaM8L3A+CjxwPgrOqmJ1dHRvbsGsvdOy5df5ysK8/qGjPC9wPgo8cD4KPGJyPgo8L3A+CjxwPi0gKElCQWN0aW9uKWJ0bkNsaWNrZWQ6KGlkKXNlbmRlcns8L3A+CjxwPgo8YnI+CjwvcD4KPHA+fTwvcD4KPHA+Cjxicj4KPC9wPgo8cD69q1pCYXJTREuw/Lqs1NrP7sS/uaSzzLWx1tCho8ztvNO/4qO6UXVhcnR6Q29yZS5mcmFtZXdvcmsgLENvcmVWaWRlby5mcmFtZXdvcmsgLENvcmVNZWRpYS5mcmFtZXdvcmssbGliaWNvbnYuZHlsaWIsQ29yZUdyYXBoaWNzLmZyYW1ld29ya6GjPC9wPgo8cD4KPGJyPgo8L3A+CjxwPr2rQmxvY2tBbGVydEFjdGlvblNoZWV0sPy6rNTaz+7Ev7mks8y1sdbQPC9wPgo8cD4KPGJyPgo8L3A+CjxwPtTaIFdTUVZpZXdDb250cm9sbGVyLmjW0NL9yOvNt87EvP6hozwvcD4KPHA+Cjxicj4KPC9wPgo8cD4jaW1wb3J0IA==”ZBarSDK.h”

#import “BlockAlertView.h”

遵循協議 ZBarReaderDelegate,

#pragma mark – ZBarReaderDelegate

– (void) readerControllerDidFailToRead: (ZBarReaderController*) reader

withRetry: (BOOL) retry

{

}

//二維碼

– (void) imagePickerController: (UIImagePickerController*) reader

didFinishPickingMediaWithInfo: (NSDictionary*) info

{

}

定義實例變量:

ZBarReaderViewController *reader;

UIView* line; //二維碼掃描線。

BOOL isBottom;

NSTimer* lineTimer;//二維碼掃描線計時器。

自定義二維碼掃描界面,(想法是這樣的,先把reader原來的界面全部清空,然後自定義界面,因為ZBarSDK是分裝好的靜態庫,)

-(void)setOverlayStyle:(ZBarReaderViewController *)reader_{

for (UIView *temp in [reader_.view subviews]){

for (UIButton* btn in [temp subviews]) {

if ([btn isKindOfClass:[UIButton class]]) {

[btn removeFromSuperview];

}

}

//去掉toolbar

for (UIToolbar* tool in [temp subviews]) {

if ([tool isKindOfClass:[UIToolbar class]]) {

[tool setHidden:YES];

[tool removeFromSuperview];

}

}

isBottom = NO;

//掃描線

line = [[UIView alloc] initWithFrame:CGRectMake(40, 105, 240, 2)];

line.backgroundColor = [UIColor greenColor];

[reader_.view addSubview:line];

lineTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(moveLine) userInfo:nil repeats:YES];

[lineTimer fire];

UIImage *scanningBg = [UIImage imageNamed:@”scanning-568h.png”];

CGSize size = [UIScreen mainScreen].bounds.size;

UIImageView *scanningView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];

scanningView.image = scanningBg;

[reader_.view addSubview:scanningView];

//用於取消操作的button

UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

UIImage *bimage = [UIImage imageNamed:@”yellowButton.png”];

//[cancelButton setBackgroundImage:bimage forState:UIControlStateDisabled];

[cancelButton setBackgroundColor:[UIColor whiteColor]];

[cancelButton setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];

[cancelButton setFrame:CGRectMake(20, size.height – 84, 280, 40)];

[cancelButton setTitle:@”取消” forState:UIControlStateNormal];

[cancelButton.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];

[cancelButton addTarget:self action:@selector(dismissOverlayView:)forControlEvents:UIControlEventTouchUpInside];

[reader_.view addSubview:cancelButton];

}

}

//屏幕移動掃描線。

-(void)moveLine{

CGRect lineFrame = line.frame;

CGFloat y = lineFrame.origin.y;

if (!isBottom) {

isBottom = YES;

y=y+245.0;

lineFrame.origin.y = y;

[UIView animateWithDuration:1.5 animations:^{

line.frame = lineFrame;

}];

}else if(isBottom){

isBottom = NO;

y = y -245;

lineFrame.origin.y = y;

[UIView animateWithDuration:1.5 animations:^{

line.frame = lineFrame;

}];

}

}

// 點擊cancel button事件

– (void)dismissOverlayView:(id)sender{

[lineTimer invalidate];

[reader dismissModalViewControllerAnimated:YES];

}

接下來在viewdidload中初始化 reader

– (void)viewDidLoad

{

[super viewDidLoad];

reader = [ZBarReaderViewController new];

reader.readerDelegate = self;

reader.wantsFullScreenLayout = NO;

//隱藏底部控制按鈕

reader.showsZBarControls = NO;

[self setOverlayStyle:reader];//

ZBarImageScanner *scanner = reader.scanner;

[scanner setSymbology: ZBAR_I25

config: ZBAR_CFG_ENABLE

to: 0];

}

在button事件中添加跳轉到掃描界面的代碼。

– (IBAction)btnClicked:(id)sender {

[self presentViewController:reader animated:YES completion:Nil];

}

定義內置留言器 WebViewVC.h,拖拽一個uiwebview連接插座變量
aWebView。將uiwebview的delegate設置為self

WebViewVC.h遵循協議 UIWebViewDelegate,

在 WebViewVC.h定義全局變量:@property (nonatomic,retain) NSString* urlStr;

在 WebViewVC.h的viewDidLoad加載網頁。

– (void)viewDidLoad

{

[super viewDidLoad];

if (self.urlStr && [self.urlStr rangeOfString:@”http:”].length>0) {

NSLog(@”%@”,self.urlStr);

NSURL *url =[NSURL URLWithString:self.urlStr];

NSLog(@”open web with:%@”,url);

NSURLRequest *request =[NSURLRequest requestWithURL:url];

_aWebView = [[UIWebView alloc]initWithFrame:self.view.frame];

_aWebView.delegate =self;

[self.view addSubview:_aWebView];

[_aWebView loadRequest:request];

}

}

最後再WSQViewController.h中處理掃描結果。

在- (void) imagePickerController: (UIImagePickerController*) reader

didFinishPickingMediaWithInfo: (NSDictionary*) info做掃描結果的判斷:

#pragma mark – ZBarReaderDelegate

– (void) readerControllerDidFailToRead: (ZBarReaderController*) reader

withRetry: (BOOL) retry

{

BlockAlertView *bAlert = [BlockAlertView alertWithTitle:@”結果:” message:@”掃描失敗,無法讀取二維碼信息”];

[bAlert addButtonWithTitle:@”知道瞭” block:nil];

[bAlert show];

}

//二維碼

– (void) imagePickerController: (UIImagePickerController*) reader

didFinishPickingMediaWithInfo: (NSDictionary*) info

{

// ADD: get the decode results

id results =

[info objectForKey: ZBarReaderControllerResults];

ZBarSymbol *symbol = nil;

for(symbol in results)

break;

if(symbol.data && [symbol.data rangeOfString:@”http:”].length > 0)

{

NSString *regex = @”http+:[^\\s]*”;

NSPredicate *predicate = [NSPredicate predicateWithFormat:@”SELF MATCHES %@”,regex];

//正則表達式判斷
是否包含 http:

if ([predicate evaluateWithObject:symbol.data])

{

//判斷是不是我們自己的二維碼

if ([symbol.data rangeOfString:@”https://itunes.apple.com/cn/app/id794862904″].length>0&& [[symbol.data componentsSeparatedByString:@”?”] count]>1)
{

NSString* strUrl =symbol.data;

WebViewVC* web = [[WebViewVC alloc] initWithNibName:@”WebViewVC” bundle:nil];

web.urlStr = strUrl;

NSLog(@”strurl = %@”,strUrl);

UINavigationController* navi = [[UINavigationController alloc] initWithRootViewController:web];

[reader presentViewController:navi animated:YES completion:nil];

}else{

[[UIApplication sharedApplication] openURL: [NSURL URLWithString:symbol.data]];

}

}else{

//不是網頁鏈接的情況。

NSString* msgBody = [symbol.data stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

BlockAlertView *bAlert = [BlockAlertView alertWithTitle:@”結果:” message:msgBody];

[bAlert addButtonWithTitle:@”知道瞭” block:nil];

[bAlert show];

}

}else if ([symbol.data rangeOfString:@”@@”].length > 0){

NSArray* array = [symbol.data componentsSeparatedByString:@”@@”];

NSLog(@”ARRAY = %@”,array);

if (array && [array count]>0) {

NSString *msg = [NSString stringWithFormat:@””,[array description]];

BlockAlertView *bAlert = [BlockAlertView alertWithTitle:@”結果:” message:msg];

NSMutableString* strBody = [[NSMutableString alloc] initWithCapacity:3];

for (NSString* str in array) {

NSArray* tempArray = [str componentsSeparatedByString:@”[“];

if (tempArray&& [tempArray count]>0) {

NSString* key = [tempArray objectAtIndex:0];

NSString* valueStr = [tempArray objectAtIndex:1];

NSString* value = [[valueStr componentsSeparatedByString:@”]”] objectAtIndex:0];

if ([key isEqualToString:@”url”]) {

[bAlert setCancelButtonWithTitle:@”打開網頁” block:^{

//在這裡打開網頁

//[[UIApplication sharedApplication] openURL:[NSURL URLWithString: value]];

[self openWebViewOf:value];

}];

}

else if([key isEqualToString:@”tel”]){

[bAlert setCancelButtonWithTitle:@”打電話” block:^{

//在這裡打開網頁

NSString* strTel = [NSString stringWithFormat:@”tel://%@”,value];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:strTel]];

}];

}

}

}

[bAlert show];

}

}

//[reader dismissViewControllerAnimated:YES completion:nil];

}

註:

打開appstore下載app有兩中方式。

第一種:

itms-apps://ax/itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReViews?type=Purpe+Software&id=794862904?mt=8″

第二種:

itms-apps://itunes.apple.com/cn/app/id794862904?url=https://xyk.cebbank.com,

為瞭騙過第三方的掃描軟件,比如,微信,淘寶,那麼必須在連接中加上 https:// 這樣才行。

將第一種方式改成。

https://ax/itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReViews?type=Purpe+Software&id=794862904?mt=8″在微信中還是不跳。

那麼就采用第二種方式。

https://itunes.apple.com/cn/app/id794862904?url=https://xyk.cebbank.com

這樣的話就很容易的解決瞭微信掃一掃跳轉的問題瞭,

最開始,我甚至使用的一個網頁連接,然後在打開網頁的時候讓網頁重定向,但是微信死活就是不跳轉,但是我又發現攜程網的app二維碼也是這種方式,攜程可以跳,讓我糾結瞭半天。最後查看攜程的跳轉連接。發現它總共跳轉瞭四次如下,

https://m.ctrip.com/m/c3,

https://m.ctrip.com/market/download.aspx?from=c3,

https://itunes.apple.com/cn/app/id379395415?mt=8,

itms-apps://itunes.apple.com/cn/app/id379395415?mt=8,

以我目前的情況是沒時間搞它瞭,不知道有沒有大牛給解答一下。

最後附上我寫的html跳轉頁面。

<script type=”text/javascript”>

window.location = “mqq:open”;

window.location=”itms-apps://itunes.apple.com/cn/app/794862904?mt=8″;

</script>

是事實上是

附上背景圖:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *