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

前端之家收集整理的这篇文章主要介绍了Swift/OC 为View或ImageView设置聊天消息的小三角前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Swift代码


  1. override func viewDidLoad() {
  2. super.viewDidLoad()
  3.  
  4. //UIImageView
  5. let showView = UIImageView(frame: CGRectMake(100,100,100))
  6. showView.image = UIImage(named: "Snip20160422_3")
  7. showView.layer.mask = test(showView)
  8. self.view.addSubview(showView)
  9.  
  10. //UIView
  11. let blankView = UIView(frame: CGRectMake(250,100))
  12. blankView.backgroundColor = UIColor.greenColor()
  13. blankView.layer.mask = test(blankView)
  14. self.view.addSubview(blankView)
  15. }
  16.  
  17. ///把设置小三角
  18. func test(showView: UIView) -> CAShapeLayer {
  19. let viewWidth = CGFloat(CGRectGetWidth(showView.frame))
  20. let viewHeight = CGFloat(CGRectGetHeight(showView.frame))
  21.  
  22. //所占的宽度,整个view所占的宽度不会变,已经被制定,所以这个宽度会占用整个view的宽度,
  23. let rightSpace: CGFloat = 10
  24. //距离顶部的距离
  25. let topSpace: CGFloat = 30
  26.  
  27. let point1 = CGPointMake(0,0)
  28. let point2 = CGPointMake(viewWidth - rightSpace,0)
  29. let point3 = CGPointMake(viewWidth - rightSpace,topSpace)
  30. let point4 = CGPointMake(viewWidth,topSpace)
  31. let point5 = CGPointMake(viewWidth - rightSpace,topSpace + 10)
  32. let point6 = CGPointMake(viewWidth - rightSpace,viewHeight)
  33. let point7 = CGPointMake(0,viewHeight)
  34.  
  35. let path = UIBezierPath()
  36. path.moveToPoint(point1)
  37. path.addLineToPoint(point2)
  38. path.addLineToPoint(point3)
  39. path.addLineToPoint(point4)
  40. path.addLineToPoint(point5)
  41. path.addLineToPoint(point6)
  42. path.addLineToPoint(point7)
  43.  
  44. let layer = CAShapeLayer()
  45. layer.path = path.CGPath
  46. return layer
  47. }
  48. }

OC代码


  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3.  
  4. UIView *blankView = [[UIView alloc] initWithFrame:CGRectMake(100,100)];
  5. blankView.backgroundColor = [UIColor redColor];
  6. blankView.layer.mask = [self testWithView:blankView];
  7. [self.view addSubview:blankView];
  8.  
  9. UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(250,100)];
  10. imageView.image = [UIImage imageNamed:@"Snip20160422_3"];
  11. imageView.layer.mask = [self testWithView:blankView];
  12. [self.view addSubview:imageView];
  13. }
  14.  
  15. - (CAShapeLayer *)testWithView:(UIView *)view
  16. {
  17. CGFloat viewWidth = CGRectGetWidth(view.frame);
  18. CGFloat viewHeight = CGRectGetHeight(view.frame);
  19.  
  20. CGFloat rightSpace = 10;
  21. CGFloat topSpace = 15;
  22.  
  23. CGPoint point1 = CGPointMake(0,0);
  24. CGPoint point2 = CGPointMake(viewWidth-rightSpace,0);
  25. CGPoint point3 = CGPointMake(viewWidth-rightSpace,topSpace);
  26. CGPoint point4 = CGPointMake(viewWidth,topSpace);
  27. CGPoint point5 = CGPointMake(viewWidth-rightSpace,topSpace+10.);
  28. CGPoint point6 = CGPointMake(viewWidth-rightSpace,viewHeight);
  29. CGPoint point7 = CGPointMake(0,viewHeight);
  30.  
  31. UIBezierPath *path = [UIBezierPath bezierPath];
  32. [path moveToPoint:point1];
  33. [path addLineToPoint:point2];
  34. [path addLineToPoint:point3];
  35. [path addLineToPoint:point4];
  36. [path addLineToPoint:point5];
  37. [path addLineToPoint:point6];
  38. [path addLineToPoint:point7];
  39. [path closePath];
  40.  
  41. CAShapeLayer *layer = [CAShapeLayer layer];
  42. layer.path = path.CGPath;
  43. return layer;
  44. }

猜你在找的Swift相关文章