Sök…


Skapa en UIImageView

För att skapa en UIImageView programmatiskt, behöver du bara skapa en instans av UIImageView :

//Swift
let imageView = UIImageView()

//Objective-C
UIImageView *imageView = [[UIImageView alloc] init];

Du kan ställa in storleken och positionen för UIImageView med en CGRect :

//Swift
imageView.frame = CGRect(x: 0, y: 0, width: 200, height: 200)

//Objective-C
imageView.frame = CGRectMake(0,0,200,200);

Eller så kan du ställa in storleken under initieringen:

//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;

Obs! Du måste importera UIKit att använda en UIImageView .

Tilldela en bild till en UIImageView

Du kan tilldela en bild till en UIImageView under initieringen eller senare med image :

//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"];

Animera en UIImageView

Du kan animera en UIImageView genom att snabbt visa bilder på den i en sekvens med UIImageView animationsegenskaper:

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

Den animationImages Fastigheten är en Array av UIImages som drivs igenom från topp till botten när animeringen utlöses.

Egenskapen animationDuration är ett Double säger hur många sekunder animationen kommer att köras i.

Egenskapen animationRepeatCount är en Int som säger hur många gånger animationen kommer att köras.

För att starta och stoppa animeringen kan du ringa lämpliga metoder för att göra det:

imageView.startAnimating()
imageView.stopAnimating()

Det finns metoden isAnimating() som returnerar ett Boolean värde som indikerar om animationen körs i ett ögonblick eller inte.

Observera att detta inte är ett särskilt effektivt sätt att skapa animationer: det är ganska långsamt och resurskrävande. Överväg att använda lager eller Sprites för bättre resultat

Gör en bild till en cirkel eller rundad

Detta exempel visar hur man gör en UIView eller UIImageView , avrundad med någon radie som denna:

exempel skärmdump

Objective-C

someImageView.layer.cornerRadius = CGRectGetHeight(someImageView.frame) / 2;
someImageView.clipsToBounds = YES;

Snabb

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)

Det föreslås att om du använder autolayout så lägger someImageView.layer.cornerRadius koden viewDidLayoutSubviews i viewDidLayoutSubviews . Detta gör att bildens cornerRadius kan uppdateras om bilden ändrar storlek.

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    someImageView.layer.cornerRadius = someImageView.frame.size.width/2
    someImageView.layer.masksToBounds = true
}

UII-bild maskerad med etikett

Detta gör bilden maskerad till formen på bokstäverna på etiketten:

Objective-C

self.maskImage.layer.mask = self.maskLabel.layer;
self.maskImage.layer.masksToBounds = YES;

Snabb 3

maskImageView.mask = maskLabel
maskImageView.masksToBounds = true

Här är resultatet:

resultat

Ändra färg på en bild

//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]

Hur egenskaperna Läge påverkar en bild

Egenskaper för innehållsläget i en vy berättar hur dess innehåll ska läggas ut. I Interface Builder kan de olika lägena väljas i Attribute Inspector.

attribut inspektörens skärmdump

Låt oss använda två bildvyer för att se hur de olika lägena fungerar.

Gränssnitt för gränssnittsbyggare

Skala för att fylla

Skala för att fylla

Bildhöjderna och -bredderna sträcks för att matcha storleken på UIImageView .

Aspect Fit

Aspect Fit

Bildens längsta sida (antingen höjd eller bredd) är sträckt för att matcha vyn. Detta gör bilden så stor som möjligt medan du fortfarande visar hela bilden och inte snedvrider höjden eller bredden. (Jag ställde in UIImageView bakgrunden till blå så att storleken är klar.)

Aspektfyllning

Aspektfyllning

Bildens kortaste sida (antingen höjd eller bredd) är sträckt för att matcha vyn. Liksom "Aspect Fit" förvrängs inte bildens proportioner från deras ursprungliga bildförhållande.

Rita om

Rita om

Redraw är endast för anpassade vyer som behöver göra sin egen skalning och ändra storlek. Vi använder inte en anpassad vy, så vi bör inte använda Redraw. Observera att här UIImageView bara ger oss samma resultat som Scale to Fill, men det gör mer arbete bakom kulisserna.

Om Redraw säger Apple-dokumentationen :

Innehållslägen är bra för att återvinna innehållet i din vy, men du kan också ställa in innehållsläget till UIViewContentModeRedraw värdet när du specifikt vill att dina anpassade vyer ska rita om sig själva under skalning och storleksändring. Att ställa in visningens innehållsläge till detta värde tvingar systemet att ringa din vy's drawRect: -metod som svar på geometriförändringar. I allmänhet bör du undvika att använda detta värde när det är möjligt, och du bör verkligen inte använda det med vanliga systemvyer.

Centrum

Centrum

Bilden är centrerad i vyn, men bildens längd och bredd är inte sträckt.

Topp

Topp

Bildens övre kant är centrerad horisontellt längst upp i vyn, och bildens längd och bredd är inte sträckt.

Botten

Botten

Bildens nedre kant är centrerad horisontellt längst ned i vyn och bildens längd och bredd är inte sträckt.

Vänster

Vänster

Bildens vänstra kant är centrerad vertikalt till vänster om vyn, och bildens längd och bredd är inte sträckt.

Rätt

Rätt

Bildens högra kant är vertikalt centrerad till höger om vyn, och bildens längd och bredd är inte sträckt.

Övre vänstra

Övre vänstra

Det övre vänstra hörnet av bilden placeras i det övre vänstra hörnet av vyn. Bildens längd och bredd är inte sträckt.

Överst till höger

Överst till höger

Det övre högra hörnet av bilden placeras i det övre högra hörnet av vyn. Bildens längd och bredd är inte sträckt.

Nedre vänstra

Nedre vänstra

Det nedre vänstra hörnet av bilden placeras i det nedre vänstra hörnet av vyn. Bildens längd och bredd är inte sträckt.

Nere till höger

Nere till höger

Det nedre högra hörnet av bilden placeras i det nedre högra hörnet av vyn. Bildens längd och bredd är inte sträckt.

anteckningar

  • Detta exempel kommer ursprungligen härifrån .

  • Om innehållet (i vårt fall bilden) har samma storlek som vyn (i vårt fall UIImageView ), kommer inte att ändra innehållsläget någon märkbar skillnad.

  • Se denna och denna fråga för en diskussion om innehållslägen för andra vyer än UIImageView .

  • För att ställa in inställning av innehållsläget programmatiskt gör du följande:

      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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow