2015-12-30 95 views
1

作一圓視圖中的一個必須做的如何創建一個橢圓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 
} 

除了我的橢圓形的觀點有尖尖的結束,你可以看到here.

我的問題是:我如何擺脫尖銳的目標,並讓他們輪流?


如果這是我使用的任何擔心:

  • 斯威夫特2
  • IOS 9.2
  • 的Xcode 7.2
+0

您不能創建使用'cornerRadius'的橢圓。 – rmaddy

回答

5

使用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 
    } 

} 

演示:

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 

結果:

oval mask

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

enter image description here