Advertisement
Guest User

Untitled

a guest
Mar 1st, 2015
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.45 KB | None | 0 0
  1. private func setUp(){
  2.  
  3. let path = roundedPolygonWithRect(frame, lineWidth: 4, sides: 6, cornerRadius: 15 )
  4.  
  5. maskLayer.path = path.CGPath
  6. maskLayer.lineWidth = CGFloat(lineWidth)
  7. maskLayer.strokeColor = UIColor.clearColor().CGColor
  8. maskLayer.fillColor = UIColor.whiteColor().CGColor
  9.  
  10. self.layer.mask = maskLayer
  11.  
  12. borderLayer.path = path.CGPath
  13. borderLayer.lineWidth = CGFloat(lineWidth)
  14. borderLayer.strokeColor = UIColor(red: 188, green: 218, blue: 212, alpha: 1.0).CGColor
  15.  
  16. borderLayer.fillColor = UIColor.clearColor().CGColor
  17.  
  18. self.layer.addSublayer(borderLayer)
  19.  
  20. }
  21.  
  22. private func updatePaths(){
  23.  
  24. let path = roundedPolygonWithRect(frame, lineWidth: lineWidth, sides: numberOfSides, cornerRadius: cornerRadius )
  25.  
  26. maskLayer.path = path.CGPath
  27. borderLayer.path = path.CGPath
  28.  
  29. }
  30.  
  31. /** Create UIBezierPath for regular polygon with rounded corners
  32. *
  33. * @param square The CGRect of the square in which the path should be created.
  34. * @param lineWidth The width of the stroke around the polygon. The polygon will be inset such that the stroke stays within the above square.
  35. * @param sides How many sides to the polygon (e.g. 6=hexagon; 8=octagon, etc.).
  36. * @param cornerRadius The radius to be applied when rounding the corners.
  37. *
  38. * @return UIBezierPath of the resulting rounded polygon path.
  39. */
  40.  
  41. private func roundedPolygonWithRect(square:CGRect, lineWidth:Float, sides:Int, cornerRadius:Float) -> UIBezierPath {
  42.  
  43. var path = UIBezierPath()
  44.  
  45. // how much to turn at every corner
  46. let theta = Float(2.0 * M_PI) / Float(sides)
  47.  
  48. // offset from which to start rounding corners
  49. let offset:Float = cornerRadius * tanf( theta / 2.0 )
  50.  
  51. let squareWidth = Float( min(square.size.width, square.size.height) )
  52.  
  53. var length = squareWidth - lineWidth
  54. if( sides % 4 != 0){
  55. length = length * cosf(theta / 2.0) // + offset / 2.0
  56. }
  57.  
  58. let sideLength = length * Float(tanf(theta / 2.0))
  59.  
  60. // start drawing ap 'point' in lower right corner
  61.  
  62. let p1 = squareWidth / 2.0 + sideLength / 2.0 - offset
  63. let p2 = squareWidth - ((squareWidth - length) / 2.0)
  64.  
  65.  
  66. println("P1 = (p1)")
  67.  
  68. println("P2 = (p2)")
  69.  
  70.  
  71.  
  72. var point = CGPointMake(CGFloat(p1), CGFloat(p2))
  73.  
  74. var angle = Float(M_PI)
  75. path.moveToPoint(point)
  76.  
  77. // draw the sides around rounded corners of the polygon
  78. for( var i = 0; i < sides; i++){
  79. let x1 = Float(point.x) + ((sideLength - offset * 2.0) * cosf(angle))
  80. let y1 = Float(point.y) + ((sideLength - offset * 2.0) * sinf(angle))
  81.  
  82. println("X = (x1)")
  83.  
  84. println("Y = (y1)")
  85.  
  86.  
  87. point = CGPointMake(CGFloat(x1), CGFloat(y1))
  88. path.addLineToPoint(point)
  89.  
  90. let centerX = Float(point.x) + (cornerRadius) * cosf(angle + Float(M_PI_2))
  91. let centerY = Float(point.y) + (cornerRadius) * sinf(angle + Float(M_PI_2))
  92. let center = CGPointMake(CGFloat(centerX), CGFloat(centerY))
  93. let radius:CGFloat = CGFloat(cornerRadius)
  94. let startAngle = CGFloat(angle) - CGFloat(M_PI_2)
  95. let endAngle = CGFloat(angle) + CGFloat(theta) - CGFloat(M_PI_2)
  96.  
  97. path.addArcWithCenter(center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
  98. point = path.currentPoint
  99. angle += theta
  100.  
  101. }
  102.  
  103. path.closePath()
  104.  
  105. return path
  106.  
  107. }
  108.  
  109. var angle = Float(M_PI_2)
  110.  
  111. let p1 = (squareWidth / 2.0 + sideLength / 2.0 - offset)+50
  112. let p2 = squareWidth - ((squareWidth - length) / 2.0)-120
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement