Zoeken…


Maak een UIImageView

Om een UIImageView programmatisch te maken, hoeft u alleen maar een instantie van UIImageView :

//Swift
let imageView = UIImageView()

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

U kunt de grootte en positie van de UIImageView met een CGRect :

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

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

Of u kunt de grootte instellen tijdens de initialisatie:

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

Opmerking: U moet UIKit importeren om een UIImageView te gebruiken.

Een afbeelding toewijzen aan een UIImageView

U kunt een afbeelding toewijzen aan een UIImageView tijdens de initialisatie of later met de eigenschap 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"];

Een UIImageView animeren

U kunt een UIImageView animeren door afbeeldingen snel in een reeks weer te geven met behulp van de animatie-eigenschappen van de 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

De eigenschap animationImages is een Array van UIImages die van boven naar beneden wordt doorlopen wanneer de animatie wordt geactiveerd.

De eigenschap animationDuration is een Double aangeeft hoeveel seconden de animatie wordt uitgevoerd.

De eigenschap animationRepeatCount is een Int die aangeeft hoe vaak de animatie wordt uitgevoerd.

Om de animatie te starten en te stoppen, kunt u de juiste methoden hiervoor gebruiken:

imageView.startAnimating()
imageView.stopAnimating()

Er is methode isAnimating() die een Boolean waarde retourneert die aangeeft of de animatie op een bepaald moment wordt uitgevoerd of niet.

Houd er rekening mee dat dit geen zeer efficiënte manier is om animaties te maken: het is vrij traag en kost veel middelen. Overweeg het gebruik van Lagen of Sprites voor betere resultaten

Een afbeelding in een cirkel of afgerond maken

Dit voorbeeld laat zien hoe u een UIView of UIImageView , afgerond met een straal zoals deze:

voorbeeld screenshot

Doelstelling C

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

Snel

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)

Er wordt gesuggereerd dat als u autolayout gebruikt, u de code someImageView.layer.cornerRadius in viewDidLayoutSubviews someImageView.layer.cornerRadius . Hiermee kan de cornerRadius van de afbeelding worden bijgewerkt als de afbeelding van grootte verandert.

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

UIImage gemaskeerd met label

Hierdoor wordt de afbeelding gemaskeerd naar de vorm van de letters van het label:

Doelstelling C

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

Swift 3

maskImageView.mask = maskLabel
maskImageView.masksToBounds = true

Hier is het resultaat:

resultaat

Verander de kleur van een afbeelding

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

Hoe de eigenschap Mode een afbeelding beïnvloedt

De inhoudsmoduseigenschap van een weergave vertelt hoe de inhoud moet worden ingedeeld. In de Interface Builder kunnen de verschillende modi worden geselecteerd in de Attributes Inspector.

attributen inspector screenshot

Laten we twee afbeeldingsweergaven gebruiken om te zien hoe de verschillende modi werken.

Schermafbeelding van interfacebuilder

Schalen om te vullen

Schalen om te vullen

De afbeeldingshoogten en -breedtes worden uitgerekt om overeen te komen met de grootte van de UIImageView .

Aspect Fit

Aspect Fit

De langste zijde (hoogte of breedte) van de afbeelding wordt uitgerekt zodat deze overeenkomt met de weergave. Dit maakt de afbeelding zo groot mogelijk terwijl de gehele afbeelding wordt weergegeven en de hoogte of breedte niet wordt vervormd. (Ik stel de UIImageView achtergrond in op blauw zodat de grootte ervan duidelijk is.)

Aspect vullen

Aspect vullen

De kortste zijde (hoogte of breedte) van de afbeelding wordt uitgerekt zodat deze overeenkomt met de weergave. Zoals "Aspect Fit", worden de verhoudingen van de afbeelding niet vervormd ten opzichte van hun oorspronkelijke beeldverhouding.

Terugtrekken

Terugtrekken

Opnieuw tekenen is alleen voor aangepaste weergaven die hun eigen schaal en formaat moeten wijzigen. We gebruiken geen aangepaste weergave, dus we moeten Redraw niet gebruiken. Merk op dat UIImageView ons hetzelfde resultaat geeft als Scale to Fill, maar het doet meer werk achter de schermen.

Over Redraw zegt de Apple-documentatie :

Inhoudsmodi zijn goed voor het recyclen van de inhoud van uw weergave, maar u kunt de inhoudsmodus ook instellen op de waarde UIViewContentModeRedraw wanneer u specifiek wilt dat uw aangepaste weergaven zichzelf opnieuw tekenen tijdens het schalen en vergroten of verkleinen. Als u de inhoudsmodus van uw weergave op deze waarde instelt, wordt het systeem drawRect: om de methode drawRect: uw weergave aan te roepen als reactie op geometriewijzigingen. Over het algemeen moet u deze waarde waar mogelijk vermijden en u moet deze zeker niet gebruiken met de standaard systeemweergaven.

Centrum

Centrum

De afbeelding wordt gecentreerd in de weergave, maar de lengte en breedte van de afbeelding worden niet uitgerekt.

Top

Top

De bovenrand van de afbeelding is horizontaal gecentreerd bovenaan de weergave en de lengte en breedte van de afbeelding zijn niet uitgerekt.

Bodem

Bodem

De onderrand van de afbeelding is horizontaal gecentreerd onderaan de weergave en de lengte en breedte van de afbeelding zijn niet uitgerekt.

Links

De linkerrand van de afbeelding is verticaal gecentreerd links van de weergave en de lengte en breedte van de afbeelding zijn niet uitgerekt.

Rechtsaf

Rechtsaf

De rechterrand van de afbeelding is verticaal gecentreerd rechts van de weergave en de lengte en breedte van de afbeelding zijn niet uitgerekt.

Linksboven

Linksboven

De linkerbovenhoek van de afbeelding wordt in de linkerbovenhoek van de weergave geplaatst. De lengte en breedte van de afbeelding worden niet uitgerekt.

Rechtsboven

Rechtsboven

De rechterbovenhoek van de afbeelding wordt in de rechterbovenhoek van de weergave geplaatst. De lengte en breedte van de afbeelding worden niet uitgerekt.

Linksonder

Linksonder

De linkeronderhoek van de afbeelding wordt linksonder in de weergave geplaatst. De lengte en breedte van de afbeelding worden niet uitgerekt.

Rechts onder

Rechts onder

De rechteronderhoek van de afbeelding wordt in de rechteronderhoek van de weergave geplaatst. De lengte en breedte van de afbeelding worden niet uitgerekt.

Notes

  • Dit exemplaar komt oorspronkelijk hier vandaan .

  • Als de inhoud (in ons geval de afbeelding) dezelfde grootte heeft als de weergave (in ons geval de UIImageView ), zal het wijzigen van de inhoudsmodus geen merkbaar verschil maken.

  • Zie deze en deze vraag voor een discussie over inhoudsmodi voor andere weergaven dan UIImageView .

  • Om in Swift de inhoudsmodus programmatisch in te stellen, doet u het volgende:

      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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow