您的位置:首页 > 移动开发 > Swift

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

2016-04-27 20:10 591 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息