Wie kann ich ein Bild mit Swift kreieren?
Mein 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))
}
}
Meine profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100))
tut nichts ..
Beispiel: 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
}
Das ist alles was du brauchst ....
Sie können einfach eine Erweiterung erstellen:
import UIKit
extension UIImageView {
func setRounded() {
let radius = CGRectGetWidth(self.frame) / 2
self.layer.cornerRadius = radius
self.layer.masksToBounds = true
}
}
und benutze es wie folgt:
imageView.setRounded()
Basierend auf der Antwort von @DanielQ
Swift 4 und 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
}
}
Sie können es in jeder ViewController
verwenden mit:
imageView.setRounded()
Wenn Sie meinen, Sie möchten ein UIImageView-Rundschreiben in Swift erstellen, können Sie einfach diesen Code verwenden:
imageView.layer.cornerRadius = imageView.frame.height / 2
imageView.clipsToBounds = true
Ich weiß nicht, ob dies jemandem hilft, aber ich hatte eine Zeitlang mit diesem Problem zu kämpfen. Für mich bestand das Problem darin, dass ich im Storyboard unterschiedliche Höhen und Breiten für das Bild hatte. Ich habe jede Lösung auf Stack ausprobiert und es stellte sich heraus, dass es so einfach war. Nachdem ich beide auf 200 eingestellt hatte, war mein Kreisprofil perfekt. Das war dann Code in meinem VC.
profileImage2.layer.cornerRadius = profileImage2.frame.size.width/2
profileImage2.clipsToBounds = true
Für Swift 4 :
import UIKit
extension UIImageView {
func makeRounded() {
let radius = self.frame.width/2.0
self.layer.cornerRadius = radius
self.layer.masksToBounds = true
}
}
Alle obigen Antworten konnten das Problem in meinem Fall nicht lösen. Meine ImageView
wurde in einer benutzerdefinierten UITableViewCell
abgelegt. Daher hatte ich von hier auch die layoutIfNeeded()
-Methode aufgerufen. Beispiel:
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())
}
}
Dies ist korrekt für SwiftUI
Zuerst müssen Sie die gleiche Breite und Höhe einstellen, um Circular ImageView zu erhalten. Als Breite und Höhe muss 100,100 eingestellt werden. Wenn Sie die gleiche Breite und Höhe entsprechend Ihrer erforderlichen Größe einstellen möchten, müssen Sie hier einstellen.
var imageCircle = UIImageView(frame: CGRectMake(0, 0, 100, 100))
Dann müssen Sie die Höhe/2 für den Eckenradius einstellen
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)
Für Swift3/Swift4-Entwickler:
let radius = yourImageView.frame.width / 2
yourImageView.layer.cornerRadius = radius
yourImageView.layer.masksToBounds = true
Dieser Weg ist der kostengünstigste Weg und hält Ihre Bildansicht immer aufgerundet:
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
}
}
Bei den anderen Antworten werden Sie aufgefordert, Ansichten basierend auf Rahmenberechnungen in einer UIViewController
s viewDidLoad()
-Methode abzurunden. Das ist nicht richtig , da es nicht sicher ist, wie das endgültige Bild aussehen wird.
Laden Sie Toucan von GitHub herunter. Es wird in Swift angeboten. Betäubung einfach. Es bietet auch eine Reihe anderer Bildeffekte.
Wenn Ihr Bild gerundet ist, hätte es eine Höhe und Breite, die genau dieselbe Größe haben (d. H. 120). Sie nehmen einfach die Hälfte dieser Zahl und verwenden diese in Ihrem Code (image.layer.cornerRadius = 60).
// 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)
}
}
// um die Funktion vom View Controller aufzurufen
self.imgCircleSmallImage.maskCircle(imgCircleSmallImage.image!)