饼图中扇形点击事件方法

获取饼图中被点击的扇形部分:

- (NSInteger)getCurrentSelectedOnTouch:(CGPoint)point {
    //初始化selectIndex
    __block NSInteger selectIndex = -1;

    //坐标重置
    CGAffineTransform transform = CGAffineTransformIdentity;

    //遍历饼图中的子layer
    [self.layer.sublayers enumerateObjectsUsingBlock:^(CALayer * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        CAShapeLayer *shapeLayer = (CAShapeLayer *)obj;
        CGPathRef path = [shapeLayer path];

        //CGPathContainsPoint: 如果点包含在路径中,则返回true
        if (CGPathContainsPoint(path, &transform, point, 0)) {
            selectIndex = idx;
        }
    }];
    return selectIndex;
}

点击事件:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesEnded:touches withEvent:event];

    //得到触摸点
    CGPoint point = [[touches anyObject] locationInView:self];

    //调用上面确定selectIndex的方法
    NSInteger selectIndex = [self getCurrentSelectedOnTouch:point];
    NSLog(@"被点击的部分------%ld",(long)selectIndex);
}

你可能感兴趣的:(iOS---UI)