Ricerca…


Crea un UIScrollView

Creare un'istanza di UIScrollView con un CGRect come frame.

veloce

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

Objective-C

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

Scorri Visualizza dimensioni del contenuto

La proprietà contentSize deve essere impostata sulla dimensione del contenuto scorrevole. Questo specifica la dimensione dell'area scorrevole. Lo scorrimento è visibile quando l'area scorrevole, ad esempio contentSize è più grande della dimensione del frame di UIScrollView .

Con Autolayout:

Quando il contenuto della vista di scorrimento viene impostato utilizzando l'autolayout, deve essere dimensionato in modo esplicito sia verticalmente che orizzontalmente e avere tutti e 4 i bordi aggiunti alla vista di scorrimento contenente. In questo modo, contentSize viene calcolato automaticamente in base ai contenuti della vista di scorrimento e viene inoltre aggiornato quando viene modificato il layout del contenuto.

manualmente:

veloce

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

Objective-C

scrollview.contentSize = CGSizeMake(640, 800);

ScrollView con AutoLayout

Semplici passi per usare scrollview con autolayout.

  • Crea un nuovo progetto con un'applicazione a vista singola
  • Seleziona il viewcontroller predefinito e cambia le sue dimensioni dello schermo in iPhone-4inch dall'ispettore Attributi.
  • Aggiungi una vista a scorrimento alla vista del tuo viewcontroller come segue e imposta il colore di sfondo su blu

inserisci la descrizione dell'immagine qui

  • Aggiungi vincoli su di esso come mostrato nell'immagine qui sotto

inserisci la descrizione dell'immagine qui

Ciò che questo farà è semplicemente attaccare ogni angolo di scrollview alla vista di viewcontroller

Scenario 1:

Ora diciamo che il nostro contenuto è enorme e vogliamo che scorra sia orizzontalmente che verticalmente.

Per questo,

  • Aggiungi un UIView alla scrollview del frame (0,0,700,700). Ti dà il colore di sfondo arancione per identificarlo in modo diverso.

inserisci la descrizione dell'immagine qui

Poi arriva la parte importante, ne abbiamo bisogno per scorrere orizzontalmente e verticalmente.

  • Seleziona la vista arancione e aggiungi i seguenti vincoli

    inserisci la descrizione dell'immagine qui

Lascia che ti spieghi cosa abbiamo fatto nel passaggio precedente.

  • Abbiamo fissato l'altezza e la larghezza a 700.
  • Impostiamo lo spazio finale a scrollview = 0 che indica allo scrollview che il contenuto è scorrevole orizzontalmente.
  • Impostiamo lo spazio in basso per scrollview = 0, che indica allo scrollview che il contenuto è scorrevole verticalmente.

Ora esegui il progetto e controlla.

Scenario 2: consideriamo uno scenario in cui sappiamo che la larghezza del contenuto sarà uguale alla larghezza della larghezza del rotolo, ma l'altezza è maggiore di scrollview.

Seguire i passaggi per scorrere il contenuto verticalmente.

  • Elimina il vincolo di larghezza nel caso precedente.
  • Cambia la larghezza della vista arancione in modo che corrisponda alla larghezza della vista.
  • Tenere premuto Ctrl dalla vista arancione per scorrere la vista e aggiungere un vincolo di larghezza uguale .

inserisci la descrizione dell'immagine qui

  • E fatto !!! Basta eseguire e controllare se scorre verticalmente

Scenario 3:

Ora vogliamo scorrere solo orizzontalmente e non verticalmente.

Seguire i passaggi per scorrere orizzontalmente il contenuto.

  • Annullare tutte le modifiche per ottenere i vincoli come di seguito (cioè ripristinare i vincoli originali che hanno raggiunto lo scorrimento verticale e orizzontale )

inserisci la descrizione dell'immagine qui

  • Verifica la cornice della vista arancione, che dovrebbe essere (0,0,700,700)
  • Elimina il vincolo di altezza della vista arancione.
  • Cambia l'altezza della vista arancione in modo che corrisponda all'altezza della vista.
  • Ctrl-trascina dalla vista arancione per scorrere la vista e aggiungere un vincolo di uguale altezza .

inserisci la descrizione dell'immagine qui

  • E fatto !!! Basta eseguire e controllare se scorre verticalmente

Scorrimento del contenuto con Auto Layout abilitato

Questo progetto è un esempio autonomo svolto completamente in Interface Builder. Dovresti essere in grado di analizzarlo in 10 minuti o meno. Quindi puoi applicare i concetti che hai imparato al tuo progetto.

gif animato che mostra lo scorrimento orizzontale

Qui uso solo UIView s ma possono rappresentare qualsiasi visualizzazione (ad es. Pulsante, etichetta, ecc.). Ho anche scelto lo scorrimento orizzontale perché gli screenshot dello storyboard sono più compatti per questo formato. I principi sono gli stessi per lo scrolling verticale, però.

Concetti chiave

  • UIScrollView dovrebbe usare solo una sottoview. Questo è un 'UIView' che funge da visualizzazione del contenuto per contenere tutto ciò che desideri scorrere.
  • Crea la vista del contenuto e il genitore della vista di scorrimento ha un'altezza uguale per lo scorrimento orizzontale. (Larghezze uguali per lo scorrimento verticale)
  • Assicurati che tutto il contenuto scorrevole abbia una larghezza impostata ed è bloccato su tutti i lati.

Inizia un nuovo progetto

Può essere solo un'applicazione a vista singola.

storyboard

In questo esempio, creeremo una vista di scorrimento orizzontale. Seleziona il View Controller e quindi scegli Freeform in Impostazioni dimensioni. Fai la larghezza 1,000 e l'altezza 300 . Questo ci dà la stanza sullo storyboard per aggiungere contenuti che scorreranno.

screenshot delle impostazioni di dimensioni simulate

Aggiungi una vista di scorrimento

Aggiungi un UIScrollView e UIScrollView tutti e quattro i lati alla vista radice del controller della vista.

screenshot di scrollview bloccato

Aggiungi una vista del contenuto

Aggiungi un UIView come sottoview alla vista di scorrimento. Questa è la chiave. Non provare ad aggiungere molte visualizzazioni secondarie alla vista di scorrimento. Basta aggiungere un singolo UIView . Questa sarà la vista del contenuto per le altre viste che desideri scorrere. Pin la vista del contenuto per la visualizzazione di scorrimento su tutti e quattro i lati.

screenshot di contenuti bloccati

Altezze uguali

Ora nella struttura del documento, Comando , fare clic sulla vista del contenuto e sulla vista principale della vista di scorrimento per selezionarli entrambi. Quindi imposta le altezze per essere uguale (controllo </ kbd trascinare dalla vista del contenuto alla vista di scorrimento>). Questa è anche la chiave. Poiché stiamo scorrendo orizzontalmente, la vista del contenuto della vista di scorrimento non saprà quanto dovrebbe essere alta a meno che non la impostiamo in questo modo.

impostazione dello screenshot di altezze uguali

Nota:

  • Se stessimo facendo scorrere il contenuto verticalmente, imposteremo la larghezza della vista del contenuto uguale alla larghezza del genitore della vista di scorrimento.

Aggiungi contenuto

Aggiungi tre UIView e dai loro tutti i vincoli. Ho usato margini di 8 punti per tutto.

Screenshot IB con visualizzazioni di contenuti aggiunti

vincoli:

  • Vista verde: pin i bordi superiore, sinistro e inferiore. Fai la larghezza 400.
  • Vista rossa: pin i bordi superiore, sinistro e inferiore. Fai la larghezza 300.
  • Vista viola: spilla tutti e quattro i bordi. Rendi la larghezza qualunque sia lo spazio rimanente (268 in questo caso).

L'impostazione dei vincoli di larghezza è anche la chiave in modo che la vista di scorrimento sappia quanto sarà ampia la sua vista del contenuto.

Finito

È tutto. Puoi eseguire il tuo progetto ora. Dovrebbe comportarsi come l'immagine a scorrimento nella parte superiore di questa risposta.

Ulteriore studio

Abilita / disabilita lo scorrimento

Proprietà scrollEnabled memorizza un valore Boolean che determina se lo scorrimento è abilitato o meno.
Se il valore di questa proprietà è true / YES, lo scorrimento è abilitato, altrimenti no. Il valore predefinito è true

veloce

scrollview.isScrollEnabled = true

Objective-C

scrollview.scrollEnabled = YES;

Zoom avanti / indietro UIImageView

Crea un'istanza UIScrollView

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

E quindi imposta queste proprietà:

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

Per ingrandire e ridurre l'immagine dobbiamo specificare la quantità che l'utente può ingrandire e rimpicciolire. Lo facciamo impostando i valori delle proprietà minimumZoomScale e maximumZoomScale della vista di minimumZoomScale . Entrambi sono impostati su 1.0 per impostazione predefinita.

E zoomScale a 1.0 che specifica il fattore di zoom per lo zoom minimo e massimo.

Per supportare lo zoom, dobbiamo impostare un delegato per la tua vista di scorrimento. L'oggetto delegato deve essere conforme al protocollo UIScrollViewDelegate . Quella classe delegata deve implementare il metodo viewForZoomingInScrollView() e restituire la vista per lo zoom.

Modifica il tuo ViewController come mostrato

class ViewController: UIViewController, UIScrollViewDelegate

Quindi aggiungere la seguente funzione di delega alla classe.

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

Ora crea l'istanza UIImageView

Rendi questa variabile come variabile di classe

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

E poi aggiungilo a scrollview

scrollView?.addSubview(imageView)

Riferimento

Rilevare quando UIScrollView ha terminato lo scorrimento con i metodi dei delegati

scrollViewDidEndDecelerating: indica al delegato che la visualizzazione a scorrimento ha terminato di rallentare il movimento di scorrimento.

Obiettivo C:

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

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

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

Swift:

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

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

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

Limita la direzione di scorrimento

Puoi limitare le indicazioni che l'utente può scorrere utilizzando il seguente codice:

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

Ogni volta che l'utente scorre sull'asse x, l'offset del contenuto della scrollView è impostato su 0.
Ovviamente è possibile cambiare le x s y e quindi bloccare la direzione in modo che sia solo orizzontale.

È inoltre necessario assicurarsi di inserire questo codice nel metodo delegato scrollViewDidScroll(_ scrollView: UIScrollView) . Altrimenti, non lo farai funzionare.

Inoltre, assicurarsi di aver importato UIScrollViewDelegate nella dichiarazione della classe, in questo modo:

class ViewController: UIViewController, UIScrollViewDelegate

... e imposta il delegate scrollView su self in un metodo come viewDidLoad(_:)

scrollView.delegate = self


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow