回答編集履歴

1 s

_Kentarou

_Kentarou score 8279

2017/02/25 18:59  投稿

座標の計算がずれているようでしたのでその部分を書きなおしてみました、試してみてください。
```swift
import UIKit
class HexagonButton: UIButton {
   
   override init(frame: CGRect) {
       super.init(frame: frame)
       drawHexagon()
   }
   
   required init?(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
       drawHexagon()
   }
   
   private func drawHexagon() {
       let path = createHexagonPath()
       
       let mask = CAShapeLayer()
       mask.path = path.cgPath
       
       self.layer.masksToBounds = true
       self.layer.mask = mask
       
       let borderShape = CAShapeLayer()
       borderShape.path = path.cgPath
       borderShape.lineWidth = 4.0
       borderShape.strokeColor = UIColor.red.cgColor
       borderShape.fillColor = UIColor.black.cgColor
       self.layer.insertSublayer(borderShape, at: 0)
   }
   
   private func createHexagonPath() -> UIBezierPath {
       let path = UIBezierPath()
       
       print((superview ?? UIView()) )  
         
       let x = self.center.x - self.frame.origin.x
       let y = self.center.y - self.frame.origin.y
       let height = self.bounds.size.height
       let width = self.bounds.size.width
       
       //6角形
       path.move  (to: CGPoint(x: x,
                                y: y + height / 2))
       path.addLine(to: CGPoint(x: x + width / 2,
                                y: y + height / 4))
       path.addLine(to: CGPoint(x: x + width / 2,
                                y: y - height / 4))
       path.addLine(to: CGPoint(x: x,
                                y: y - height / 2))
       path.addLine(to: CGPoint(x: x - width / 2,
                                y: y - height / 4))
       path.addLine(to: CGPoint(x: x - width / 2,
                                y: y + height / 4))
       path.close()
       return path
   }
}
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る