美文网首页iOS Developer
使用UIBezierPath绘制聊天气泡

使用UIBezierPath绘制聊天气泡

作者: 牛奈奈 | 来源:发表于2017-03-01 16:52 被阅读425次

    有的时候我们项目中会碰到这样的需求:

    • 点击某一个按钮的时候弹出一个气泡视图
    • 随着点击位置的不同出现的位置也不同
    • tipView的高度自适应内容的高度

    效果如下:

    Untitled-2.gif

    那么是怎么实现的呢?我这里使用的UIBezierPath来绘制的,主要代码在这里

        CGFloat width = self.contentView.width;
        CGFloat height = self.contentView.height;
        UIBezierPath *path = [UIBezierPath bezierPath];
        path.lineWidth = 1;
        path.lineCapStyle = kCGLineCapRound;
        path.lineJoinStyle = kCGLineJoinRound;
        [path moveToPoint:CGPointMake(10, 0)];
        [path addLineToPoint:CGPointMake(width/2 - 8, 0)];
        [path addLineToPoint:CGPointMake(width/2, -12)];
        [path addLineToPoint:CGPointMake(width/2 + 8, 0)];
        [path addArcWithCenter:CGPointMake(width - 10, 10) radius:10 startAngle:M_PI * 3/2 endAngle:M_PI * 2 clockwise:YES];
        [path addArcWithCenter:CGPointMake(width - 10, height -10) radius:10 startAngle:0 endAngle:M_PI /2 clockwise:YES];
        [path addArcWithCenter:CGPointMake(10, height -10) radius:10 startAngle:M_PI /2 endAngle:M_PI clockwise:YES];
        [path addArcWithCenter:CGPointMake(10, 10) radius:10 startAngle:M_PI  endAngle:M_PI * 3/2 clockwise:YES];
        [path closePath];
        self.shapeLayer.path = path.CGPath;
    

    以上只是绘制了tipView那么怎么实现根据点击位置的frame来改变自身在屏幕的位置呢?关键还是这两句代码:

    //获取当前点击的cell 在tableview上的位置
         CGRect rectInTableView = [self.mainView rectForRowAtIndexPath:indexPath];
    //把tableView上的位置转化为当前屏幕的位置
         CGRect rectInSuperView = [self.mainView convertRect:rectInTableView toView:[self.mainView superview]];
    

    以上就是实现的方法,整体来说还是比较简单的。

    相关文章

      网友评论

        本文标题:使用UIBezierPath绘制聊天气泡

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