微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;
}

原文地址:https://www.jb51.cc/swift/323961.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐