首页 > 其他 > 详细

ipad中zbar的使用+为zbar添加阴影+扫描线

时间:2014-03-14 18:51:18      阅读:509      评论:0      收藏:0      [点我收藏+]
1
<br><br><br>//因图片pick_bg.png是设计成iphone使用的, 我这里偷点小懒,只将imageview放大成两倍,以供ipad使用,如果iphone上想使用,将下列宏定义为1.0f即可<br><br>#define kRatia 2.0f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<em id="__mceDel">- (IBAction)scanningButtonClicked:(id)sender {
    ZBarReaderViewController * reader = [ZBarReaderViewController new];
     
 
    UIImageView *imageview = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pick_bg.png"]];
    CGSize center = [UIScreen mainScreen].bounds.size;
    CGRect imageviewRect = imageview.frame;
    imageviewRect.size.width = imageviewRect.size.width * kRatia;
    imageviewRect.size.height = imageviewRect.size.height * kRatia;
    [imageview setFrame:imageviewRect];
    [imageview setCenter:CGPointMake(center.width/2, center.height/2)];
    [reader.view addSubview:imageview];
     
    reader.readerDelegate = self;
    //如果想要快速读取到维码信息,质量高的,更能快速识别
//    [reader setVideoQuality:UIImagePickerControllerQualityTypeHigh];
     
    reader.scanCrop = [self getScanCrop:imageview.frame readerViewBounds:[UIScreen mainScreen].bounds];<br>//扫描的感应框
    reader.supportedOrientationsMask = ZBarOrientationMaskAll;
    ZBarImageScanner *scanner = reader.scanner;
     
    [scanner setSymbology: ZBAR_I25
                   config: ZBAR_CFG_ENABLE
                       to: 0];
     
    UIImageView *line = [[UIImageView alloc] initWithFrame:CGRectMake(30, 10, 220*kRatia, 2*kRatia)];
    line.image = [UIImage imageNamed:@"line.png"];
    [imageview addSubview:line];
    //定时器
    lineTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(animation1:) userInfo:line repeats:YES];<br>    //为框添加阴影
    [self addShadow:reader withImageWith:imageview.frame.size.width];
     
    [self presentViewController:reader animated:NO completion:^{
    }];
}
 
/**
 *  绿色线条扫瞄动画
 *
 *  @param timer 传递image-》by userInfo
 */
-(void)animation1:(NSTimer *)timer
{
    UIImageView *lineImage = timer.userInfo;
    UIImageView *frameImage = (UIImageView*)lineImage.superview;
     
    CGRect frameRect = frameImage.frame;
    CGRect lineRect = lineImage.frame;
    CGFloat y = lineRect.origin.y;
    lineRect.origin.y = fmodf((y + 1.0f * kRatia),frameRect.size.height-3.0f);//+frameImage.frame.origin.y;
    [lineImage setFrame:lineRect];
}
 
/**
 *  设置扫瞄区域
 *
 *  @param rect             需要扫瞄区域
 *  @param readerViewBounds 整个屏幕区域
 *
 *  @return 单位化的frame//因确切的rect 会导致扫瞄不出来,所以需要将rect扩大一点,能够增强灵敏度
 */
-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds
{
    CGFloat x,y,width,height;
     
    x = (rect.origin.x-100) / readerViewBounds.size.width;
    y = (rect.origin.y) / readerViewBounds.size.height;
    width = (rect.size.width+200) / readerViewBounds.size.width;
    height = (rect.size.height+100) / readerViewBounds.size.height;
     
    CGRect croprect = CGRectMake(x, y, width, height);
    return croprect;
}
 
 
/**
 *  添加扫描区域阴影部分
 *  @param imageWidth 图片宽度
 */
-(void)addShadow:(ZBarReaderViewController *)reader withImageWith:(CGFloat)imageWidth
{
    //最上部view
     
    CGSize frameSize = [UIScreen mainScreen].bounds.size;
    float imageHalfWidth = imageWidth / 2.0f;<br>    //顶端view的frame
    CGRect upviewFrame = CGRectMake(0, 0, frameSize.width, frameSize.height/2 - imageHalfWidth);
     
    float upY = upviewFrame.size.height;
    float upWidth = frameSize.width/2 - imageHalfWidth;
    float upHeight = frameSize.height-2 * upY;
    //左侧的view
    CGRect leftViewFrame = CGRectMake(0, upY ,upWidth , upHeight);
    //右侧的view
    CGRect rightViewRect = CGRectMake(frameSize.width/2 + imageHalfWidth, upY, upWidth, upHeight);
    //底部view
    CGRect bottomViewRect = CGRectMake(0, upY + upHeight, frameSize.width ,upY );
    [self addViewWithFrame:bottomViewRect inZBarController:reader];
    [self addViewWithFrame:rightViewRect  inZBarController:reader];
    [self addViewWithFrame:leftViewFrame  inZBarController:reader];
    [self addViewWithFrame:upviewFrame    inZBarController:reader];
}
 
-(void)addViewWithFrame:(CGRect)frame inZBarController:(ZBarReaderViewController *)reader
{
    UIView * greyView = [[UIView alloc] initWithFrame:frame];
    greyView.alpha = 0.3;
    greyView.backgroundColor = [UIColor blackColor];
    [reader.view addSubview:greyView];
}
</em>

  想在zbar库中找到能够设置阴影的方法,目前没有成功,不知zbar里有无集成方式可以设置阴影,如知道,请告诉我一声,谢谢!

 

附上所使用的小框和绿色小条在code4app的一个demo中

ipad中zbar的使用+为zbar添加阴影+扫描线,布布扣,bubuko.com

ipad中zbar的使用+为zbar添加阴影+扫描线

原文:http://www.cnblogs.com/binglin92/p/3598753.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!