2015-07-07 6 views
16

Ho cercato di modificare le dimensioni e la rotazione di una vista di avanzamento per adottare le dimensioni dello schermo. Funzionerebbe fondamentalmente avere un effetto vetro riempitivo sullo schermo del telefono.Modifica altezza di UIProgressView in Swift

ho ruotato abbastanza innocuo utilizzando self.masteryProgress.transform = CGAffineTransformMakeRotation((CGFloat(-90)/CGFloat(180.0) * CGFloat(M_PI)))

ho avuto la dimensione della vista che racchiude lo schermo utilizzando view.bounds cercando di ottenere il rect e l'altezza x larghezza. Quindi non sono bloccato lì.

Ho provato a utilizzare .frame.drawRect ma quando li uso o li interrompe o non fa nulla.

L'attributo height sembra essere bloccato a un valore costante di 2 in interfaceBuilder.

Qualsiasi soluzione prima di creare un'animazione personalizzata?

Ho provato a impostare l'altezza della barra di avanzamento in interfaceBuilder come alcuni altri post, ma ho bisogno che la vista di avanzamento riempia l'intero schermo indipendentemente dal dispositivo su cui è in esecuzione, quindi la soluzione non funzionerà nel mio caso .

ho finito per usare CGAffineTransformScale(masteryProgress.transform, view.bounds.height/1334, (view.bounds.width/2))

Dal momento che sto ruotando la progressView verticalmente, ho impostato la vista di avanzamento ad una larghezza di 1334 (l'altezza di iPhone 6 Plus) e un'altezza di 2. Dividendo l'altezza dello schermo da questi valori dovrebbe ridimensionarsi perfettamente a qualsiasi telefono.

+0

possibile duplicato del [Progress altezza vista in iOS 7] (http://stackoverflow.com/questions/18717895/progress-view-height-in-ios-7) –

+0

Plesae controlla la domanda precedente. Il metodo di auto-caricamento può essere applicato anche nello storyboard. –

+0

@WonjugKim Questo è buono e tutto, ma ho bisogno che ridimensioni alle dimensioni dello schermo e il generatore di interfacce ti consenta di ridimensionare in modo statico. –

risposta

55

È possibile scalare dal impostare il suo trasformare in questo modo:

Swift 2

masteryProgress.transform = CGAffineTransformScale(masteryProgress.transform, 1, 20) 

Swift 3,4

masteryProgress.transform = masteryProgress.transform.scaledBy(x: 1, y: 20) 

enter image description here

+0

Stavo usando CGAffineTransformMakeScale prima. Grazie! –

+0

Ciao, sto cercando di usare questo codice per il mio bar, ma sfortunatamente il mio riempie diagonalmente ... qualche idea? – dwinnbrown

+0

Sarei molto grato se poteste dare un'occhiata a @Bannings http://stackoverflow.com/questions/31453454/swift-uiprogressview-fills-diagonally – dwinnbrown

6

Th funziona:

masteryProgress.transform = CGAffineTransformMakeScale(1, 4) 
12

La trasformazione sembra essere l'unico modo per ottenere questo risultato. Prova ad aggiungerlo come estensione a UIProgressView in questo modo.

extension UIProgressView { 

    @IBInspectable var barHeight : CGFloat { 
     get { 
      return transform.d * 2.0 
     } 
     set { 
      // 2.0 Refers to the default height of 2 
      let heightScale = newValue/2.0 
      let c = center 
      transform = CGAffineTransformMakeScale(1.0, heightScale) 
      center = c 
     } 
    } 
} 
6

Se è stato aggiunto UIProgressView utilizzando Interface Builder, è sufficiente creare un vincolo di altezza e modificare per valutare ciò che è necessario. Questo è tutto.

3

In Swift 3, è cambiato in CGAffineTransform (scaleX: CGFloat, y: CGFloat).Quindi, il codice sarebbe:

masteryProgress.transform = CGAffineTransform(scaleX: 1, y: 4) 
+0

ciao! ... quando uso CGAffineTransform per progressview e gira iphone in modalità orizzontale, la barra di progressview ripristina la scala .. perché ?! – mrk182

2

In Swift versione 3.0.2 uso questo:

masteryProgress.transform = masteryProgress.transform.scaledBy(x: 1, y: 5)