Swift/OC 为View或ImageView设置聊天消息的小三角

Swift代码

override func viewDidLoad() {
    super.viewDidLoad()

    //UIImageView
    let showView = UIImageView(frame: CGRectMake(100,100,100))
    showView.image = UIImage(named: "Snip20160422_3")
    showView.layer.mask = test(showView)
    self.view.addSubview(showView)

    //UIView
    let blankView = UIView(frame: CGRectMake(250,100))
    blankView.backgroundColor = UIColor.greenColor()
    blankView.layer.mask = test(blankView)
    self.view.addSubview(blankView)
}

///把设置小三角
func test(showView: UIView) -> CAShapeLayer {
    let viewWidth = CGFloat(CGRectGetWidth(showView.frame))
    let viewHeight = CGFloat(CGRectGetHeight(showView.frame))

    //所占的宽度,整个view所占的宽度不会变,已经被制定,所以这个宽度会占用整个view的宽度,
    let rightSpace: CGFloat = 10
    //距离顶部的距离
    let topSpace: CGFloat = 30

    let point1 = CGPointMake(0,0)
    let point2 = CGPointMake(viewWidth - rightSpace,0)
    let point3 = CGPointMake(viewWidth - rightSpace,topSpace)
    let point4 = CGPointMake(viewWidth,topSpace)
    let point5 = CGPointMake(viewWidth - rightSpace,topSpace + 10)
    let point6 = CGPointMake(viewWidth - rightSpace,viewHeight)
    let point7 = CGPointMake(0,viewHeight)

    let path = UIBezierPath()
    path.movetoPoint(point1)
    path.addLinetoPoint(point2)
    path.addLinetoPoint(point3)
    path.addLinetoPoint(point4)
    path.addLinetoPoint(point5)
    path.addLinetoPoint(point6)
    path.addLinetoPoint(point7)

    let layer = CAShapeLayer()
    layer.path = path.CGPath
    return layer
    }
}

OC代码

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *blankView = [[UIView alloc] initWithFrame:CGRectMake(100,100)];
    blankView.backgroundColor = [UIColor redColor];
    blankView.layer.mask = [self testWithView:blankView];
    [self.view addSubview:blankView];

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(250,100)];
    imageView.image = [UIImage imageNamed:@"Snip20160422_3"];
    imageView.layer.mask = [self testWithView:blankView];
    [self.view addSubview:imageView];
}

- (CAShapeLayer *)testWithView:(UIView *)view
{
    CGFloat viewWidth = CGRectGetWidth(view.frame);
    CGFloat viewHeight = CGRectGetHeight(view.frame);

    CGFloat rightSpace = 10;
    CGFloat topSpace = 15;

    CGPoint point1 = CGPointMake(0,0);
    CGPoint point2 = CGPointMake(viewWidth-rightSpace,0);
    CGPoint point3 = CGPointMake(viewWidth-rightSpace,topSpace);
    CGPoint point4 = CGPointMake(viewWidth,topSpace);
    CGPoint point5 = CGPointMake(viewWidth-rightSpace,topSpace+10.);
    CGPoint point6 = CGPointMake(viewWidth-rightSpace,viewHeight);
    CGPoint point7 = CGPointMake(0,viewHeight);

    UIBezierPath *path = [UIBezierPath bezierPath];
    [path movetoPoint:point1];
    [path addLinetoPoint:point2];
    [path addLinetoPoint:point3];
    [path addLinetoPoint:point4];
    [path addLinetoPoint:point5];
    [path addLinetoPoint:point6];
    [path addLinetoPoint:point7];
    [path closePath];

    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.path = path.CGPath;
    return layer;
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...