我已经尝试了我找到的每个答案变体,并且都给了我相同的结果。一个奇怪的几乎钻石形状的图像视图。我正在使用它:
+
这适用于我之前正在进行的项目,但现在当我尝试它时,我得到了奇怪的钻石。
答案 0 :(得分:7)
以下是如何创建UIImageView Circular的解决方案。这种方法是新的
将以下代码复制到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
}
}
}
}
此后,在StoryBoard上选择ImageView,从Utilities面板中选择Identity Inspector。
在“自定义类”部分中,从命名为DesignableImageView的下拉菜单中选择自定义类,然后单击“返回”。点击返回后,您将看到可设计的更新。
现在转到实用程序面板中的属性检查器,您可以将图像的所需“角半径”添加为圆形。
P.S。如果您的图像是矩形,这将尝试使其成为正方形,然后是最佳圆形。
附图供参考。
答案 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)