Suche…
Erstellen Sie eine UIImageView
Um eine UIImageView
programmgesteuert zu erstellen, müssen Sie nur eine Instanz von UIImageView
:
//Swift
let imageView = UIImageView()
//Objective-C
UIImageView *imageView = [[UIImageView alloc] init];
Sie können die Größe und Position des UIImageView
mit einem CGRect
:
//Swift
imageView.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
//Objective-C
imageView.frame = CGRectMake(0,0,200,200);
Oder Sie können die Größe während der Initialisierung einstellen:
//Swift
UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
//Objective-C
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,200,200);
//Alternative way of defining frame for UIImageView
UIImageView *imageView = [[UIImageView alloc] init];
CGRect imageViewFrame = imageView.frame;
imageViewFrame.size.width = 200;
imageViewFrame.size.height = 200;
imageViewFrame.origin.x = 0;
imageViewFrame.origin.y = 0;
imageView.frame = imageViewFrame;
Hinweis: Sie müssen
UIKit
importieren, um eineUIImageView
.
Zuweisen eines Bildes zu einer UIImageView
Sie können einem UIImageView
während der Initialisierung oder später mithilfe der image
UIImageView
ein Bild zuweisen:
//Swift
UIImageView(image: UIImage(named: "image1"))
UIImageView(image: UIImage(named: "image1"), highlightedImage: UIImage(named: "image2"))
imageView.image = UIImage(named: "image1")
//Objective-C
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1"];
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1"] highlightedImage:[UIImage imageNamed:@"image2"]];
imageView.image = [UIImage imageNamed:@"image1"];
Animieren einer UIImageView
Sie können eine UIImageView
Animation animieren, indem Sie mithilfe der Animationseigenschaften von UIImageView
schnell Bilder in einer Sequenz UIImageView
:
imageView.animationImages = [UIImage(named: "image1")!,
UIImage(named: "image2")!,
UIImage(named: "image3")!,
UIImage(named: "image4")!,
UIImage(named: "image5")!,
UIImage(named: "image6")!,
UIImage(named: "image7")!,
UIImage(named: "image8")!]
imageView.animationDuration = 0.3
imageView.animationRepeatCount = 1
Die animationImages
Eigenschaft ist ein Array
von UIImages
, das beim Auslösen der Animation von oben nach unten durchlaufen wird.
Die Eigenschaft animationDuration
ist ein Double
, das angibt, für wie viele Sekunden die Animation ausgeführt wird.
Die animationRepeatCount
Eigenschaft ist ein Int
, das angibt, wie oft die Animation ausgeführt wird.
Um die Animation zu starten und zu stoppen, können Sie die entsprechenden Methoden dazu aufrufen:
imageView.startAnimating()
imageView.stopAnimating()
Es gibt eine Methode isAnimating()
die einen Boolean
Wert zurückgibt, der angibt, ob die Animation gerade läuft oder nicht.
Bitte beachten Sie, dass dies nicht sehr effizient ist, um Animationen zu erstellen: Dies ist ziemlich langsam und ressourcenintensiv. Verwenden Sie für bessere Ergebnisse Layer oder Sprites
Bild zu einem Kreis oder abgerundet machen
Dieses Beispiel zeigt, wie eine UIView
oder UIImageView
, die mit einem Radius wie UIImageView
gerundet wird:
Ziel c
someImageView.layer.cornerRadius = CGRectGetHeight(someImageView.frame) / 2;
someImageView.clipsToBounds = YES;
Schnell
someImageView.layer.cornerRadius = someImageView.frame.height/2
// this should alleviate the performance hit that adding transparency may cause - see http://stackoverflow.com/a/6254531/189804
// Be sure to check scrolling performance with Instruments if you take this approach.
someImageView.layer.shouldRasterize = true
someImageView.clipsToBounds = true // All parts of the image that are outside its bounds (the frame) are cut out (makes the rounded corners visible)
Es wird vorgeschlagen , dass , wenn Sie automatisches Layout , dass Sie den setzen someImageView.layer.cornerRadius
Code in viewDidLayoutSubviews
. Dadurch kann der cornerRadius
des cornerRadius
aktualisiert werden, wenn sich die Bildgröße ändert.
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
someImageView.layer.cornerRadius = someImageView.frame.size.width/2
someImageView.layer.masksToBounds = true
}
UIImage mit Label maskiert
Dadurch wird das Bild auf die Form der Buchstaben des Etiketts maskiert:
Ziel c
self.maskImage.layer.mask = self.maskLabel.layer;
self.maskImage.layer.masksToBounds = YES;
Swift 3
maskImageView.mask = maskLabel
maskImageView.masksToBounds = true
Hier ist das Ergebnis:
Ändern Sie die Farbe eines Bildes
//Swift
imageView.tintColor = UIColor.redColor()
imageView.image = imageView.image?.imageWithRenderingMode(.AlwaysTemplate)
//Swift 3
imageView.tintColor = UIColor.red
imageView.image = imageView.image?.withRenderingMode(.alwaysTemplate)
//Objective-C
imageView.tintColor = [UIColor redColor];
imageView.image = [imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
Wie wirkt sich die Mode-Eigenschaft auf ein Bild aus?
Die Content-Mode-Eigenschaft einer Ansicht gibt an, wie der Inhalt angeordnet werden soll. Im Interface Builder können die verschiedenen Modi im Informations-Inspektor ausgewählt werden.
Verwenden Sie zwei Bildansichten, um zu sehen, wie die verschiedenen Modi funktionieren.
Zum Füllen skalieren
Die UIImageView
und -breiten werden entsprechend der Größe der UIImageView
.
Aspect Fit
Die längste Seite (entweder Höhe oder Breite) des Bildes wird entsprechend der Ansicht gestreckt. Dadurch wird das Bild so groß wie möglich, wobei immer noch das gesamte Bild angezeigt wird und die Höhe oder Breite nicht verzerrt wird. (Ich setze den UIImageView
Hintergrund auf Blau, damit die Größe klar ist.)
Aspekt füllen
Die kürzeste Seite (entweder Höhe oder Breite) des Bildes wird entsprechend der Ansicht gestreckt. Wie bei "Aspect Fit" werden die Proportionen des Bildes nicht von ihrem ursprünglichen Seitenverhältnis verzerrt.
Neu zeichnen
Neuzeichnen ist nur für benutzerdefinierte Ansichten, die ihre eigene Skalierung und Größenänderung vornehmen müssen. Wir verwenden keine benutzerdefinierte Ansicht, daher sollten Sie Redraw nicht verwenden. Beachten Sie, dass UIImageView
uns hier genau dasselbe Ergebnis liefert wie Scale to Fill, aber es UIImageView
mehr Arbeit hinter den Kulissen.
Über Redraw sagt die Apple-Dokumentation :
Inhaltsmodi eignen sich zum Wiederherstellen des Inhalts Ihrer Ansicht. Sie können den Inhaltsmodus jedoch auch auf den
UIViewContentModeRedraw
Wert setzen, wenn Sie möchten, dass Ihre benutzerdefinierten Ansichten speziell während Skalierungs- und Größenänderungsvorgängen neu gezeichnet werden. Wenn Sie den Inhaltsmodus Ihrer Ansicht auf diesen Wert setzen, muss das System diedrawRect:
-Methode Ihrer Ansicht als Reaktion auf GeometrieänderungendrawRect:
. Im Allgemeinen sollten Sie diesen Wert möglichst vermeiden, und Sie sollten ihn auf keinen Fall mit den Standardsystemansichten verwenden.
Center
Das Bild wird in der Ansicht zentriert, aber Länge und Breite des Bildes werden nicht gestreckt.
oben
Die Oberkante des Bildes wird horizontal oben in der Ansicht zentriert und die Länge und Breite des Bildes werden nicht gestreckt.
Unterseite
Der untere Bildrand wird am unteren Rand der Ansicht horizontal zentriert, und die Länge und Breite des Bildes werden nicht gestreckt.
Links
Der linke Rand des Bildes ist vertikal links von der Ansicht zentriert, und die Länge und Breite des Bildes werden nicht gestreckt.
Recht
Der rechte Rand des Bildes ist vertikal rechts von der Ansicht zentriert, und die Länge und Breite des Bildes werden nicht gestreckt.
Oben links
Die obere linke Ecke des Bildes befindet sich in der oberen linken Ecke der Ansicht. Die Länge und Breite des Bildes werden nicht gestreckt.
Oben rechts
Die obere rechte Ecke des Bildes befindet sich in der rechten oberen Ecke der Ansicht. Die Länge und Breite des Bildes werden nicht gestreckt.
Unten links
Die untere linke Ecke des Bildes befindet sich in der unteren linken Ecke der Ansicht. Die Länge und Breite des Bildes werden nicht gestreckt.
Unten rechts
Die rechte untere Ecke des Bildes befindet sich in der rechten unteren Ecke der Ansicht. Die Länge und Breite des Bildes werden nicht gestreckt.
Anmerkungen
Dieses Beispiel stammt ursprünglich von hier .
Wenn der Inhalt (in unserem Fall das Bild) die gleiche Größe wie die Ansicht hat (in unserem Fall die
UIImageView
), macht das Ändern des Inhaltsmodus keinen erkennbaren Unterschied.In dieser und dieser Frage finden Sie eine Diskussion über Inhaltsmodi für andere Ansichten als
UIImageView
.Um den Inhaltsmodus programmgesteuert festzulegen, führen Sie in Swift folgende Schritte aus:
imageView.contentMode = UIViewContentMode.scaleToFill imageView.contentMode = UIViewContentMode.scaleAspectFit imageView.contentMode = UIViewContentMode.scaleAspectFill imageView.contentMode = UIViewContentMode.redraw imageView.contentMode = UIViewContentMode.center imageView.contentMode = UIViewContentMode.top imageView.contentMode = UIViewContentMode.bottom imageView.contentMode = UIViewContentMode.left imageView.contentMode = UIViewContentMode.right imageView.contentMode = UIViewContentMode.topLeft imageView.contentMode = UIViewContentMode.topRight imageView.contentMode = UIViewContentMode.bottomLeft imageView.contentMode = UIViewContentMode.bottomRight