美文网首页
iOS 刮奖

iOS 刮奖

作者: Raindew | 来源:发表于2019-12-19 19:59 被阅读0次

前段时间公司项目提了个刮奖需求,网上找了很多,不过大多不能用,或者不合适。所以参考网友代码自己写了一个 Demo

先看下效果图
2019-12-02 20.10.12.gif

关于在TableView中刮奖时的手势冲突,可以这样解决
写一个类继承UITableView,重写手势代理方法

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"YLScratchMaskView"]) {
        return NO;      //关闭手势
    }
    return YES;
}

使用代码


- (void)viewDidLoad {
    [super viewDidLoad];
    //创建刮刮卡组件
    self.scratchView = [[YLScratchView alloc] initWithFrame:CGRectMake(20, 120, self.view.frame.size.width - 40, 126) backImage:[UIImage imageNamed:@"result_image"] mask:[UIImage imageNamed:@"mask"] scratchWidth:30 scratchType:kCGLineCapSquare];
    self.scratchView.delegate = self;
    [self.view addSubview:self.scratchView];
    
}

- (void)scratchView:(YLScratchView *)scratchView beganPoint:(CGPoint)point {
    NSLog(@"开始刮奖 %f,%f",point.x,point.y);
}

- (void)scratchView:(YLScratchView *)scratchView movedProgress:(CGFloat)progress {
    NSLog(@"刮奖百分比:%f",progress);
    if (progress>=0.25) {//百分之25
        [self.scratchView.scratchMask removeFromSuperview];
    }
}

- (void)scratchView:(YLScratchView *)scratchView endedPoint:(CGPoint)point {
    NSLog(@"刮奖结束%f,%f",point.x,point.y);
    
}

实现的核心代码

//获取透明像素占总像素的百分比
- (CGFloat)getAlphaPixelPercent:(UIImage *)img {
    
    //计算像素总个数
    NSInteger width = img.size.width;
    NSInteger height = img.size.height;
    NSInteger bitmapByteCount = width * height;
    unsigned char *pixelData = malloc(bitmapByteCount * 4);


    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
    CGContextRef context = CGBitmapContextCreate(pixelData, width, height, 8, width, colorSpace, kCGImageAlphaOnly);
    CGRect rect = CGRectMake(0, 0, width, height);
    CGContextClearRect(context, rect);
    CGContextDrawImage(context, rect, img.CGImage);
    //计算透明像素个数
    NSInteger alphaPixelCount = 0;
    for (NSInteger y=0;y < height;y ++) {
        for (NSInteger x=0;x < width;x ++) {
            if (pixelData[y * width + x] == 0) {
                alphaPixelCount += 1;
            }
        }
    }
    
    free(pixelData);
    return ((CGFloat)alphaPixelCount) / ((CGFloat)bitmapByteCount);
}

相关文章

  • iOS 刮奖

    前段时间公司项目提了个刮奖需求,网上找了很多,不过大多不能用,或者不合适。所以参考网友代码自己写了一个 D...

  • iOS刮奖效果

  • 刮奖

    需求 刮开浮层显示奖品没有中奖:显示遗憾没有中奖中奖:显示奖品名字刮开后与后台进行数据交互,告知后台是否中奖 原理...

  • 刮奖

    昨天傍晚因下雨,没去广场转。于是就去郑辉逛超市,楼上楼下逛了一会儿,买点日常生活用品、蔬菜等。结帐走到出口...

  • 刮奖

    今天中午天气很热,想喝酸奶,我迫不及待的打开冰箱,发现冰箱里只有最后一大包了,我比姐姐睇先拿出那一大包酸...

  • 刮奖

    ^_^ 刮奖,抠出个“谢” (⊙o⊙)甩出奖票

  • 迷恋了刮刮奖

    怎么办!

  • 100-days-Coding - day12

    day12-0827 html - 刮刮奖 刮刮奖的整体思路,就是canvas的动态绘制「事件驱动」 使用两个ca...

  • 刮奖人生

    小时候刮奖 刮出谢字还不扔 非要把谢谢惠顾 都刮的干干净净才舍得放手 和后来太多的事一模一样

  • 刮奖后

    接女儿回家的路上,她认真地说:"妈妈,如果我中了30万,一定会把钱分给你和爸爸。" 我笑着说:"好呀!真是孝顺孩子...

网友评论

      本文标题:iOS 刮奖

      本文链接:https://www.haomeiwen.com/subject/ajsvnctx.html