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 eenUIImageView
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:
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:
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.
Laten we twee afbeeldingsweergaven gebruiken om te zien hoe de verschillende modi werken.
Schalen om te vullen
De afbeeldingshoogten en -breedtes worden uitgerekt om overeen te komen met de grootte van de UIImageView
.
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
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
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 systeemdrawRect:
om de methodedrawRect:
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
De afbeelding wordt gecentreerd in de weergave, maar de lengte en breedte van de afbeelding worden niet uitgerekt.
Top
De bovenrand van de afbeelding is horizontaal gecentreerd bovenaan de weergave en de lengte en breedte van de afbeelding zijn niet uitgerekt.
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
De rechterrand van de afbeelding is verticaal gecentreerd rechts van de weergave en de lengte en breedte van de afbeelding zijn niet uitgerekt.
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
De rechterbovenhoek van de afbeelding wordt in de rechterbovenhoek van de weergave geplaatst. De lengte en breedte van de afbeelding worden niet uitgerekt.
Linksonder
De linkeronderhoek van de afbeelding wordt linksonder in de weergave geplaatst. De lengte en breedte van de afbeelding worden niet uitgerekt.
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