kitoko552.memo

kitoko552のメモ

CGPathCreateWithEllipseInRectを使って円形のviewを作る

CGPathCreateWithEllipseInRectは、指定されたCGRectの各辺に接するような楕円のCGPathを得ることができます。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let view1 = UIView(frame: CGRectMake(35, 50, 300, 500))
        view1.backgroundColor = UIColor.greenColor()
        
        // view1の各辺に接するような楕円のパスを作成
        let path = CGPathCreateWithEllipseInRect(view1.bounds, nil)
        
        // maskをCAShapeLayerにして、そのパスにさきほどのパスを代入
        view1.layer.mask = { () -> CALayer in
            let mask = CAShapeLayer()
            mask.path = path
            return mask
        }()
        
        // view1と同じframeのviewを作成(比較のため)
        let view2 = UIView(frame: CGRectInset(view1.frame, 0, 0))
        view2.backgroundColor = UIColor.blueColor()
        
        self.view.addSubview(view2)
        self.view.addSubview(view1)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

f:id:kitoko552:20150624143755p:plain

上の例では、maskをCAShapeLayerにして、そのpathにCGPathCreateWithEllipseInRectで得たCGPathを設定することで楕円のviewを実現しています。

※この記事では以下の本を参考にしています。

詳解 iOS SDK 第4版 ―ワンランク上のiPhone/iPadプログラミング

詳解 iOS SDK 第4版 ―ワンランク上のiPhone/iPadプログラミング