2016-04-10 11 views
3

私はすべての答えのバリエーションを試してみましたが、私はすべて同じ結果を与えてくれました。奇妙なほぼダイヤモンドの形をしたイメージビュー。これは私が働いていた以前のプロジェクトで働いていた円形ImageView Swift

imageView.layer.cornerRadius = imageView.frame.width/2 
imageView.clipsToBounds = true 

が、私はそれをしようとすると、今私は奇妙なダイヤモンドを得る:私はこれを使用していました。

+1

はウルImageViewのは、同じ高さと幅 –

+0

を持っていそう私はそれ平方毎回 – m1234

+0

を作りました'cornerRadius'を設定すると、あなたの画像ビューのフレームがおそらく変化しています。これは、実際には円形のイメージを作成する間違った方法です。あなたは実際に丸くなるように切り取られたオリジナルから新しい 'UIImage'を作成するべきです。これは、画像ビューの 'cornerRadius'を設定するよりはるかに優れています。 – rmaddy

答えて

0

画像ビューは正方形でなければなりません。

+0

私はそれを正方形にしています – m1234

1

uiimageviewの表示モードを変更してみてください。 Aspect fitに設定されていて、ダイヤモンドのように見えるかもしれません。

それとも、以下のコードを使用して、円形の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) 
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
他の代替ソリューションについては、上記のリンクを参照してください。

0

あなたがのviewDidLoad()にこのコードをしようとしている場合は、ここでUIImageView円形を作成するにはどのように解決策はあるviewDidLayoutSubviews()

viewDidLayoutSubviews() { 

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

でそれを試してみてください。このアプローチは新しいです

  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を選択し、ユーティリティパネルからIDインスペクタを選択します。

  4. カスタムクラスセクションでは、DesignableImageViewという名前のドロップダウンメニューからカスタムクラスを選択し、戻り値を返します。あなたはリターンを打った後、設計可能なuptodateを見るでしょう。

  5. ユーティリティパネルでアトリビュートインスペクタに移動し、円形のイメージに必要な角の半径を追加できます。

P.S.あなたのイメージが長方形である場合、これは正方形にしてから最良の円にしようとします。

添付の参考用画像です。

Select Custom class

Set Attributes

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)