Ios 如何创建椭圆形视图?

Ios 如何创建椭圆形视图?,ios,swift,uiview,Ios,Swift,Uiview,要形成圆形视图,必须执行以下操作 shapeView.layer.cornerRadius = CGFloat(width)/2.0 所以我扩展了这个逻辑,形成了一个椭圆形的视图 if width >= height { shapeView.layer.cornerRadius = CGFloat(width)/2.0 } else{ shapeView.layer.cornerRadius = CGFloat(height)/2.0 } 除非我的椭圆视图有尖头,你可以

要形成圆形视图,必须执行以下操作

shapeView.layer.cornerRadius = CGFloat(width)/2.0
所以我扩展了这个逻辑,形成了一个椭圆形的视图

if width >= height {
    shapeView.layer.cornerRadius = CGFloat(width)/2.0
} else{
    shapeView.layer.cornerRadius = CGFloat(height)/2.0
}
除非我的椭圆视图有尖头,你可以看到

我的问题是:我如何摆脱尖头,使它们圆


如果我使用的是任何问题:

  • 斯威夫特2
  • IOS 9.2
  • Xcode 7.2

使用
CAShapeLayer
作为层掩码:

class OvalView: UIView {

    override func layoutSubviews() {
        super.layoutSubviews()
        layoutOvalMask()
    }

    private func layoutOvalMask() {
        let mask = self.shapeMaskLayer()
        let bounds = self.bounds
        if mask.frame != bounds {
            mask.frame = bounds
            mask.path = CGPathCreateWithEllipseInRect(bounds, nil)
        }
    }

    private func shapeMaskLayer() -> CAShapeLayer {
        if let layer = self.layer.mask as? CAShapeLayer {
            return layer
        }
        let layer = CAShapeLayer()
        layer.fillColor = UIColor.blackColor().CGColor
        self.layer.mask = layer
        return layer
    }

}
演示:

结果:


您无法使用
cornerRadius
创建椭圆形。对于Swift 3,以下内容已更改:
mask.path=CGPath(ellipseIn:bounds,transform:nil)
layer.fillColor=UIColor.black.cgColor
let backgroundView = UIView(frame: CGRectMake(0, 0, 450, 250))
backgroundView.backgroundColor = UIColor.redColor()
let ovalView = OvalView(frame: CGRectMake(25, 25, 400, 200))
backgroundView.addSubview(ovalView)
let imageView = UIImageView(image: UIImage(named: "image.jpg"))
imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.frame = ovalView.bounds
ovalView.addSubview(imageView)

XCPlaygroundPage.currentPage.liveView = backgroundView
float w = 150.0f;
float h = 50.0f;
self.MyView.frame = CGRectMake(95, 461, w, w);
self.MyView.layer.cornerRadius = w / 2;