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 eine UIImageView .

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:

Beispiel-Screenshot

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:

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.

Attribut-Inspektor-Screenshot

Verwenden Sie zwei Bildansichten, um zu sehen, wie die verschiedenen Modi funktionieren.

Interface Builder-Screenshot

Zum Füllen skalieren

Zum Füllen skalieren

Die UIImageView und -breiten werden entsprechend der Größe der UIImageView .

Aspect Fit

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

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

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 die drawRect: -Methode Ihrer Ansicht als Reaktion auf Geometrieänderungen drawRect: . Im Allgemeinen sollten Sie diesen Wert möglichst vermeiden, und Sie sollten ihn auf keinen Fall mit den Standardsystemansichten verwenden.

Center

Center

Das Bild wird in der Ansicht zentriert, aber Länge und Breite des Bildes werden nicht gestreckt.

oben

oben

Die Oberkante des Bildes wird horizontal oben in der Ansicht zentriert und die Länge und Breite des Bildes werden nicht gestreckt.

Unterseite

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

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

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

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
    


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow