Swift/OC 为View或ImageView设置聊天气泡的小三角

41 篇文章 0 订阅 ¥9.90 ¥99.00
57 篇文章 0 订阅
本文介绍了如何使用Swift 3.0和Objective-C为View或ImageView设置聊天气泡中的小三角形,包括两种语言的实现代码。
摘要由CSDN通过智能技术生成

Swift代码(同步到Swift3.0)


override func viewDidLoad() {
        super.viewDidLoad()

        let showView = UIImageView.init(frame: CGRect(x: 100, y: 100, width: 100, height: 100))


        showView.image = UIImage(named: "Snip20161312_3")
        showView.layer.mask = test(showView: showView)
        self.view.addSubview(showView)

        //UIView
        let blankView = UIView.init(frame: CGRect(x: 250, y: 100, width: 100, height: 100))

        blankView.backgroundColor = UIColor.green
        blankView.layer.mask = test(showView: blankView)
        self.view.addSubview(blankView)
}

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

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

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

        let path = UIBezierPath()
        path.move(to: point1)
        path.addLine(to: point2)
        path.addLine(to: point3)
        path.addLine(to: point4)
        path.addLine(to: point5)
        path.addLine(to: point6)
        path.addLine(to: point7)

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

OC代码


- (void)viewDidLoad {
    [super viewDidLoad];

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

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(250, 100, 100, 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值