How can i make i circle picture with swift ?
My ViewController :
import UIKit
import Foundation
class FriendsViewController : UIViewController{
@IBOutlet weak var profilPicture: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100))
}
}
My profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100))
do nothing ..
Exemple: http://www.appcoda.com/ios-programming-circular-image-calayer/
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var image: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
image.layer.borderWidth = 1
image.layer.masksToBounds = false
image.layer.borderColor = UIColor.black.cgColor
image.layer.cornerRadius = image.frame.height/2
image.clipsToBounds = true
}
If you want it on an extension
import UIKit
extension UIImageView {
func makeRounded() {
layer.borderWidth = 1
layer.masksToBounds = false
layer.borderColor = UIColor.black.cgColor
layer.cornerRadius = self.frame.height / 2
clipsToBounds = true
}
}
That is all you need....
You can simple create extension:
import UIKit
extension UIImageView {
func setRounded() {
let radius = CGRectGetWidth(self.frame) / 2
self.layer.cornerRadius = radius
self.layer.masksToBounds = true
}
}
and use it as below:
imageView.setRounded()
Based in the answer of @DanielQ
Swift 4 and Swift 3
import UIKit
extension UIImageView {
func setRounded() {
self.layer.cornerRadius = (self.frame.width / 2) //instead of let radius = CGRectGetWidth(self.frame) / 2
self.layer.masksToBounds = true
}
}
You can use it in any ViewController
with:
imageView.setRounded()
If you mean you want to make a UIImageView circular in Swift you can just use this code:
imageView.layer.cornerRadius = imageView.frame.height / 2
imageView.clipsToBounds = true
Don't know if this helps anyone but I was struggling with this problem for awhile, none of the answers online helped me. For me the problem was I had different heights and widths set on the image in storyboard. I tried every solution on stack and it turns out it was something as simple as that. Once I set them both to 200 my circle profile image was perfect. This was code then in my VC.
profileImage2.layer.cornerRadius = profileImage2.frame.size.width/2
profileImage2.clipsToBounds = true
For Swift 4 :
import UIKit
extension UIImageView {
func makeRounded() {
let radius = self.frame.width/2.0
self.layer.cornerRadius = radius
self.layer.masksToBounds = true
}
}
This way is the least expensive way and always keeps your image view rounded:
class RoundedImageView: UIImageView {
override init(frame: CGRect) {
super.init(frame: frame)
clipsToBounds = true
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
clipsToBounds = true
}
override func layoutSubviews() {
super.layoutSubviews()
assert(bounds.height == bounds.width, "The aspect ratio isn't 1/1. You can never round this image view!")
layer.cornerRadius = bounds.height / 2
}
}
The other answers are telling you to make views rounded based on frame calculations set in a UIViewController
s viewDidLoad()
method. This isn't correct , since it isn't sure what the final frame will be.
All the answers above couldn't solve the problem in my case. My ImageView
was placed in a customized UITableViewCell
. Therefore I had also call the layoutIfNeeded()
method from here. Example:
class NameTableViewCell:UITableViewCell,UITextFieldDelegate { ...
override func awakeFromNib() {
self.layoutIfNeeded()
profileImageView.layoutIfNeeded()
profileImageView.isUserInteractionEnabled = true
let square = profileImageView.frame.size.width < profileImageView.frame.height ? CGSize(width: profileImageView.frame.size.width, height: profileImageView.frame.size.width) : CGSize(width: profileImageView.frame.size.height, height: profileImageView.frame.size.height)
profileImageView.addGestureRecognizer(tapGesture)
profileImageView.layer.cornerRadius = square.width/2
profileImageView.clipsToBounds = true;
}
struct CircleImage: View {
var image: Image
var body: some View {
image
.clipShape(Circle())
}
}
This is correct for SwiftUI
extension UIImageView{
// Round Image
func roundCorner() {
self.layer.masksToBounds = true
self.layer.borderWidth = 1.0
self.layer.borderColor = UIColor.clear.cgColor
self.layer.cornerRadius = self.frame.size.width/2
}
}
First you need to set equal width and height for getting Circular ImageView.Below I set width and height as 100,100.If you want to set equal width and height according to your required size,set here.
var imageCircle = UIImageView(frame: CGRectMake(0, 0, 100, 100))
Then you need to set height/2 for corner radius
imageCircle.layer.cornerRadius = imageCircle.frame.size.height/2
imageCircle.layer.borderWidth = 1
imageCircle.layer.borderColor = UIColor.blueColor().CGColor
imageCircle.clipsToBounds = true
self.view.addSubview(imageCircle)
For Swift3/Swift4 Developers:
let radius = yourImageView.frame.width / 2
yourImageView.layer.cornerRadius = radius
yourImageView.layer.masksToBounds = true
For Rounded Image, Only following code would be enough in Extension:
self.layoutIfNeeded() // in case of autolayout (mentioned by Tom Spee in the comment).
And also make sure the property of UIImageView contentMode should be set correctly to get the result. In my case it is:
imageView.contentMode = .scaleAspectFit
extension UIImageView {
func setRounded() {
self.layoutIfNeeded()
self.layer.cornerRadius = self.frame.height / 2
self.clipsToBounds = true
}
}
// code to make the image round
import UIKit
extension UIImageView {
public func maskCircle(anyImage: UIImage) {
self.contentMode = UIViewContentMode.ScaleAspectFill
self.layer.cornerRadius = self.frame.height / 2
self.layer.masksToBounds = false
self.clipsToBounds = true
// make square(* must to make circle),
// resize(reduce the kilobyte) and
// fix rotation.
// self.image = prepareImage(anyImage)
}
}
// to call the function from the view controller
self.imgCircleSmallImage.maskCircle(imgCircleSmallImage.image!)
imageView.layer.cornerRadius = imageView.frame.height/2
imageView.clipToBounds = true
If your image is rounded, it would have a height and width of the exact same size (ie 120). You simply take half of that number and use that in your code (image.layer.cornerRadius = 60).
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.