圆形ImageView Swift

时间:2016-04-10 04:21:34

标签: ios swift user-interface

我已经尝试了我找到的每个答案变体,并且都给了我相同的结果。一个奇怪的几乎钻石形状的图像视图。我正在使用它:

+

这适用于我之前正在进行的项目,但现在当我尝试它时,我得到了奇怪的钻石。

5 个答案:

答案 0 :(得分:7)

以下是如何创建UIImageView Circular的解决方案。这种方法是新的

  1. 在项目中创建一个新的Designable.swift文件。
  2. 将以下代码复制到Designable.swift文件中。

    import UIKit
    
    @IBDesignable class DesignableImageView: UIImageView { }
    @IBDesignable class DesignableButton:UIButton { }
    @IBDesignable class DesignableTextField:UITextField { }
    
    extension UIView {
       @IBInspectable
       var borderWidth :CGFloat {
       get {
           return layer.borderWidth
       }
    
       set(newBorderWidth){
          layer.borderWidth = newBorderWidth
       }
    }
    
    @IBInspectable
    var borderColor: UIColor? {
       get{
           return layer.borderColor != nil ? UIColor(CGColor: layer.borderColor!) :nil
       }
       set {
           layer.borderColor = newValue?.CGColor
       }
    }
    
    @IBInspectable
    var cornerRadius :CGFloat {
        get {
            return layer.cornerRadius
        }
    
        set{
           layer.cornerRadius = newValue
           layer.masksToBounds = newValue != 0
        }
    }
    
    @IBInspectable
    var makeCircular:Bool? {
        get{
            return nil
        }
    
        set {
            if let makeCircular = newValue where makeCircular {
                cornerRadius = min(bounds.width, bounds.height) / 2.0
            }
        }
      }
    }
    
  3. 此后,在StoryBoard上选择ImageView,从Utilities面板中选择Identity Inspector。

  4. 在“自定义类”部分中,从命名为DesignableImageView的下拉菜单中选择自定义类,然后单击“返回”。点击返回后,您将看到可设计的更新。

  5. 现在转到实用程序面板中的属性检查器,您可以将图像的所需“角半径”添加为圆形。

  6. P.S。如果您的图像是矩形,这将尝试使其成为正方形,然后是最佳圆形。

    附图供参考。

    Select Custom class

    Set Attributes

答案 1 :(得分:1)

尝试更改uiimageview的查看模式。它可能已设置为Aspect适合使其看起来像钻石。

或者你可以使用下面的代码创建一个圆形的uiimage,

imageLayer.contents = yourImage.CGImage
let mask = CAShapeLayer()
let dx = lineWidth + 1.0
let path = UIBezierPath(ovalInRect: CGRectInset(self.bounds, dx, dx))
mask.fillColor = UIColor.blackColor().CGColor
mask.path = path.CGPath
mask.frame = self.bounds
layer.addSublayer(mask)

imageLayer = CAShapeLayer()
imageLayer.frame = self.bounds
imageLayer.mask = mask
imageLayer.contentsGravity = kCAGravityResizeAspectFill
layer.addSublayer(imageLayer)

答案 2 :(得分:1)

如果你想用新图像创建它可能就像这样

let img = UIImage(named: "logo.png")

UIGraphicsBeginImageContextWithOptions(imgView.bounds.size, false, 0.0);
// Add a clip before drawing anything, in the shape of an rounded rect

UIBezierPath(roundedRect: imgView.bounds, cornerRadius:imgView.bounds.size.width/2).addClip()
img!.drawInRect(imgView.bounds)
imgView.image = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext();

参考&如果您想对其进行扩展:https://stackoverflow.com/a/25459500/4557505
您可以在上面的链接中找到更多信息以获取其他替代解决方案

答案 3 :(得分:0)

如果您在 viewDidLoad()中尝试此代码,请在 viewDidLayoutSubviews()

中试用
viewDidLayoutSubviews() {

imageView.layer.cornerRadius = imageView.frame.size.width/2
imageView.layer.masksToBounds = true
}

答案 4 :(得分:0)

extension UIImageView {
  public func maskCircle(inputImage: UIImage) {
    self.contentMode = UIViewContentMode.scaleAspectFill
    self.layer.cornerRadius = self.frame.height / 2
    self.layer.masksToBounds = false
    self.clipsToBounds = true

   self.image = inputImage
  }
}

上述扩展名的使用示例:

let yourImage:UIImage = UIImage(named: "avatar")!
yourImageView.maskCircle(yourImage)