Zoeken…


Maak een UIScrollView

Maak een exemplaar van UIScrollView met een CGRect als frame.

Snel

let scrollview = UIScrollView.init(frame: CGRect(x: 0, y: 0, width: 320, height: 400))

Doelstelling C

UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)];

Scroll View Content Grootte

De eigenschap contentSize moet worden ingesteld op de grootte van de schuifbare inhoud. Dit geeft de grootte van het schuifbare gebied aan. Scrollen is zichtbaar wanneer het schuifbare gebied is, dwz contentSize is groter dan de framegrootte van UIScrollView .

Met Autolayout:

Wanneer de inhoud van de schuifweergave is ingesteld met behulp van autolayout, moet deze zowel verticaal als horizontaal expliciet zijn en moeten alle vier randen zijn vastgemaakt aan de bijbehorende schuifweergave. Op die manier wordt de contentSize automatisch berekend op basis van de inhoud van de contentSize en wordt deze ook bijgewerkt wanneer de lay-out van de content wordt gewijzigd.

handmatig:

Snel

scrollview.contentSize = CGSize(width: 640, height: 800)

Doelstelling C

scrollview.contentSize = CGSizeMake(640, 800);

ScrollView met AutoLayout

Eenvoudige stappen om scrollview met autolayout te gebruiken.

  • Maak een nieuw project met een enkele view-applicatie
  • Selecteer de standaard viewcontroller en wijzig de schermgrootte naar iPhone-4inch vanuit attributen inspector.
  • Voeg als volgt een scrollweergave toe aan de weergave van uw viewcontroller en zet de achtergrondkleur op blauw

voer hier de afbeeldingsbeschrijving in

  • Voeg beperkingen toe zoals getoond in onderstaande afbeelding

voer hier de afbeeldingsbeschrijving in

Wat dit zal doen, is gewoon elke rand van scrollview aan viewviewcontroller's plakken

Scenario 1:

Laten we nu zeggen dat onze inhoud enorm is en dat we zowel horizontaal als verticaal willen scrollen.

Voor deze,

  • Voeg een UIView toe aan de scrollweergave van het frame (0,0.700.700). Geef het een oranje achtergrondkleur om het anders te identificeren.

voer hier de afbeeldingsbeschrijving in

Vervolgens komt het belangrijke deel, we hebben het nodig om horizontaal en verticaal te scrollen.

  • Selecteer de oranje weergave en voeg de volgende beperkingen toe

    voer hier de afbeeldingsbeschrijving in

Laat me uitleggen wat we in bovenstaande stap hebben gedaan.

  • We hebben de hoogte en breedte vastgesteld op 700.
  • We stellen de volgruimte in op scrollview = 0, wat de scrollview vertelt dat de inhoud horizontaal schuifbaar is.
  • We hebben de onderste ruimte ingesteld op scrollview = 0, wat de scrollview vertelt dat de inhoud verticaal schuifbaar is.

Voer nu het project uit en controleer.

Scenario 2: Laten we een scenario overwegen waarbij we weten dat de breedte van de inhoud hetzelfde zal zijn als de breedte van de schuifbreedte, maar de hoogte is groter dan de schuifweergave.

Volg de stappen om inhoud verticaal te scrollen.

  • Verwijder de breedtebeperking in het bovenstaande geval.
  • Wijzig de breedte van de oranje weergave zodat deze overeenkomt met de breedte van de scrollweergave.
  • Ctrl-slepen vanuit oranje weergave om te scrollen en beperking van gelijke breedte toe te voegen.

voer hier de afbeeldingsbeschrijving in

  • En klaar!!! Ren gewoon en controleer of het verticaal schuift

Scenario 3:

Nu willen we alleen horizontaal scrollen en niet verticaal.

Volg de stappen om horizontaal door de inhoud te bladeren.

  • Maak alle wijzigingen ongedaan om beperkingen te bereiken zoals hieronder (dwz herstel originele beperkingen die verticale en horizontale scroll bereikten )

voer hier de afbeeldingsbeschrijving in

  • Vink het kader van de oranje weergave aan, dat moet zijn (0,0.700.700)
  • Hoogtebeperking van oranje weergave verwijderen.
  • Wijzig de hoogte van de oranje weergave zodat deze overeenkomt met de hoogte van de scrollweergave.
  • Ctrl-sleep vanuit de oranje weergave om de weergave te scrollen en gelijke hoogtebeperkingen toe te voegen.

voer hier de afbeeldingsbeschrijving in

  • En klaar!!! Ren gewoon en controleer of het verticaal schuift

Inhoud scrollen met Auto Layout ingeschakeld

Dit project is een op zichzelf staand voorbeeld dat volledig in de Interface Builder is uitgevoerd. Je zou het binnen 10 minuten of minder moeten kunnen verwerken. Vervolgens kunt u de geleerde concepten toepassen op uw eigen project.

geanimeerde gif met horizontaal scrollen

Hier gebruik ik alleen UIView s maar deze kunnen elke weergave weergeven die u wilt (bijv. Knop, label, enz.). Ik heb ook gekozen voor horizontaal scrollen omdat de screenshots van het storyboard compacter zijn voor dit formaat. De principes zijn echter hetzelfde voor verticaal scrollen.

Sleutelbegrippen

  • De UIScrollView mag slechts één subview gebruiken. Dit is een 'UIView' die dient als de inhoudsweergave voor alles wat u wilt scrollen.
  • Zorg ervoor dat de inhoudsweergave en de bovenliggende weergave van de schuifweergave gelijke hoogten hebben voor horizontaal scrollen. (Gelijke breedte voor verticaal scrollen)
  • Zorg ervoor dat alle schuifbare inhoud een ingestelde breedte heeft en aan alle kanten is vastgezet.

Start een nieuw project

Het kan slechts een enkele view-applicatie zijn.

storyboard

In dit voorbeeld maken we een horizontale schuifweergave. Selecteer de View Controller en kies vervolgens Freeform in Size Inspector. Maak de breedte 1,000 en de hoogte 300 . Dit geeft ons gewoon de ruimte op het storyboard om inhoud toe te voegen die zal scrollen.

gesimuleerde formaatinstellingen screenshot

Voeg een scrolweergave toe

Voeg een UIScrollView en pin alle vier de zijden aan de hoofdweergave van de viewcontroller.

vastgezette screenshot

Voeg een inhoudsweergave toe

Voeg een UIView als een subweergave aan de schuifweergave. Dit is de sleutel. Probeer niet veel subweergaven aan de schuifweergave toe te voegen. Voeg gewoon een enkele UIView . Dit wordt uw inhoudsweergave voor de andere weergaven die u wilt scrollen. Speld de inhoudsweergave aan de vier zijden vast aan de schuifweergave.

vastgezette inhoud screenshot bekijken

Gelijke hoogten

Klik nu in de documentomtrek op Command en klik op zowel de inhoudsweergave als de bovenaanzicht van de schuifweergave om ze allebei te selecteren. Stel vervolgens de hoogten gelijk in (Control </ kbd drag van de Content View naar de Scroll View>). Dit is ook de sleutel. Omdat we horizontaal scrollen, weet de inhoudsweergave van de schuifweergave niet hoe hoog deze moet zijn, tenzij we deze op deze manier instellen.

screenshot van gelijke hoogte instellen

Notitie:

  • Als we de inhoud verticaal laten scrollen, zouden we de breedte van de inhoudsweergave gelijk maken aan de breedte van de bovenliggende weergave.

Content toevoegen

Voeg drie UIView 's toe en geef ze alle beperkingen. Ik heb voor alles 8 puntmarges gebruikt.

IB screenshot met toegevoegde inhoudsweergaven

beperkingen:

  • Groene weergave: speld de boven-, linker- en onderrand. Maak de breedte 400.
  • Rode weergave: speld de boven-, linker- en onderrand. Maak de breedte 300.
  • Paars beeld: speld alle vier de randen. Maak de breedte, ongeacht de resterende ruimte (268 in dit geval).

Het instellen van de breedtebeperkingen is ook belangrijk, zodat de schuifweergave weet hoe breed de inhoudsweergave zal zijn.

Afgewerkt

Dat is alles. U kunt nu uw project uitvoeren. Het zou zich moeten gedragen als de schuivende afbeelding bovenaan dit antwoord.

Verdere studie

Scrollen in- / uitschakelen

Eigenschap scrollEnabled slaat een Boolean waarde op die bepaalt of scrollen is ingeschakeld of niet.
Als de waarde van deze eigenschap true / YES is, is scrollen ingeschakeld, anders niet. De standaardwaarde is true

Snel

scrollview.isScrollEnabled = true

Doelstelling C

scrollview.scrollEnabled = YES;

In- / uitzoomen UIImageView

Maak een UIScrollView-instantie

let scrollview = UIScrollView.init(frame: self.view.bounds)

En stel vervolgens deze eigenschappen in:

scrollView.minimumZoomScale = 0.1
scrollView.maximumZoomScale = 4.0
scrollView.zoomScale = 1.0
scrollview.delegate = self as? UIScrollViewDelegate 

Om in en uit te zoomen op de afbeelding moeten we de hoeveelheid opgeven die de gebruiker kan in- en uitzoomen. We doen dit door waarden in te stellen van de eigenschappen minimumZoomScale en maximumZoomScale . Beide zijn standaard ingesteld op 1.0.

En zoomScale tot 1.0 die de zoomfactor specificeren voor de minimale en maximale zoomfactor.

Om zoomen te ondersteunen, moeten we een gemachtigde instellen voor uw schuifweergave. Het gemachtigde object moet voldoen aan het UIScrollViewDelegate protocol. Die gedelegeerde klasse moet de methode viewForZoomingInScrollView() implementeren en de weergave terugbrengen om in te zoomen.

Wijzig uw ViewController zoals getoond

class ViewController: UIViewController, UIScrollViewDelegate

Voeg vervolgens de volgende gemachtigdefunctie toe aan de klasse.

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
    return imageView
}

Maak nu een UIImageView-instantie

Maak deze variabele als klassenvariabele

var imageView:UIImageView = UIImageView.init(image: UIImage.init(named: "someImage.jpg"))

En voeg het dan toe aan scrolweergave

scrollView?.addSubview(imageView)

Referentie

Detecteren wanneer UIScrollView klaar is met scrollen met gedelegeerde methoden

scrollViewDidEndDecelerating: dit vertelt de gedelegeerde dat de scrollweergave is gestopt met het vertragen van de scrollbeweging.

Doelstelling C:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    [self stoppedScrolling];
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    if (!decelerate) {
        [self stoppedScrolling];
    }
}

- (void)stoppedScrolling {
    // done, do whatever
}

Snel:

func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if !decelerate {
        stoppedScrolling()
    }
}

func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
    stoppedScrolling()
}

func stoppedScrolling() {
    // done, do whatever
}

Beperk de schuifrichting

U kunt de aanwijzingen waarnaar de gebruiker kan scrollen beperken met behulp van de volgende code:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.x != 0 {
        scrollView.contentOffset.x = 0
    }
}

Telkens wanneer de gebruiker op de x-as schuift, wordt de inhoudsverschuiving van de scrollView teruggezet op 0.
U kunt uiteraard veranderen x s tot y s en daarvoor vergrendeling richting alleen horizontale zijn.

U moet er ook voor zorgen dat u deze code in de gedelegeerde methode scrollViewDidScroll(_ scrollView: UIScrollView) . Anders krijg je het niet aan het werk.

Zorg er ook voor dat u de UIScrollViewDelegate in uw klassenaangifte heeft geïmporteerd:

class ViewController: UIViewController, UIScrollViewDelegate

... en stel de gemachtigde van de scrollView in op een methode zoals viewDidLoad(_:)

scrollView.delegate = self


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow