Как я могу обвести картинку с помощью swift?
Мой 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))
}
}
Я profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100))
ничего не делаю ..
Пример: http://www.appcoda.com/ios-programming-circular-image-calayer/
ios
swift
uiimageview
Пиксель
источник
источник
profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100))
не «ничего не делает». Он определенно что-то делает! Но то, что он делает, весьма прискорбно. Он создает UIImageView и назначает его слабой ссылке. Изображение пусто; у него нет изображения. Кроме того, эталон слабый, поэтому изображение сразу исчезает в клубах дыма. Из этого кода трудно понять, что, по вашему мнению, здесь произойдет.Ответы:
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 }
Если вы хотите это на расширении
import UIKit extension UIImageView { func makeRounded() { self.layer.borderWidth = 1 self.layer.masksToBounds = false self.layer.borderColor = UIColor.black.cgColor self.layer.cornerRadius = self.frame.height / 2 self.clipsToBounds = true } }
Это все, что вам нужно ....
источник
image.clipsToBounds = true
было именно то, что мне было нужно :-)image.layer.borderColor = UIColor.blackColor().CGColor
превращается вimage.layer.borderColor = UIColor.black.cgColor
Вы можете просто создать расширение:
import UIKit extension UIImageView { func setRounded() { let radius = CGRectGetWidth(self.frame) / 2 self.layer.cornerRadius = radius self.layer.masksToBounds = true } }
и используйте его, как показано ниже:
источник
На основе ответа @DanielQ
Swift 4 и 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 } }
Вы можете использовать его в любом
ViewController
с:источник
Если вы имеете в виду, что хотите создать циркуляр UIImageView в Swift, вы можете просто использовать этот код:
imageView.layer.cornerRadius = imageView.frame.height / 2 imageView.clipsToBounds = true
источник
image.clipsToBounds = true
изображение не будет масштабировано.self.view.layoutIfNeeded()
раньше.Не знаю, помогает ли это кому-нибудь, но я какое-то время боролся с этой проблемой, ни один из ответов в Интернете не помог мне. Для меня проблема заключалась в том, что у меня была разная высота и ширина изображения в раскадровке. Я пробовал все решения в стеке, и оказалось, что все было так просто. Как только я установил их на 200, мое изображение профиля круга стало идеальным. Тогда это был код в моем VC.
profileImage2.layer.cornerRadius = profileImage2.frame.size.width/2 profileImage2.clipsToBounds = true
источник
Для Swift 4 :
import UIKit extension UIImageView { func makeRounded() { let radius = self.frame.width/2.0 self.layer.cornerRadius = radius self.layer.masksToBounds = true } }
источник
Все приведенные выше ответы не смогли решить проблему в моем случае. Мой
ImageView
был помещен в индивидуальныйUITableViewCell
. Поэтому я также должен был вызватьlayoutIfNeeded()
метод отсюда. Пример: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; }
источник
Этот способ является наименее дорогостоящим и всегда сохраняет округлость изображения:
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 } }
В других ответах говорится, что представления должны округляться на основе вычислений кадров, установленных в методе
UIViewController
sviewDidLoad()
. Это неверно , поскольку неизвестно, каким будет окончательный кадр.источник
Сначала вам нужно установить одинаковую ширину и высоту для получения Circular ImageView. Ниже я установил ширину и высоту как 100,100. Если вы хотите установить одинаковую ширину и высоту в соответствии с вашим требуемым размером, установите здесь.
var imageCircle = UIImageView(frame: CGRectMake(0, 0, 100, 100))
Затем вам нужно установить высоту / 2 для радиуса угла.
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)
источник
Для разработчиков Swift3 / Swift4:
let radius = yourImageView.frame.width / 2 yourImageView.layer.cornerRadius = radius yourImageView.layer.masksToBounds = true
источник
struct CircleImage: View { var image: Image var body: some View { image .clipShape(Circle()) } }
Это правильно для
SwiftUI
источник
// 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) } }
// для вызова функции из контроллера представления
self.imgCircleSmallImage.maskCircle(imgCircleSmallImage.image!)
источник
imageView.layer.cornerRadius = imageView.frame.height/2 imageView.clipToBounds = true
источник
Если ваше изображение округлено, оно будет иметь одинаковую высоту и ширину (например, 120). Вы просто берете половину этого числа и используете это в своем коде (image.layer.cornerRadius = 60).
источник