2015-07-07 6 views
16

Ich habe versucht, die Größe und Drehung einer Fortschrittsanzeige zu ändern, um die Größe des Bildschirms zu übernehmen. Es würde grundsätzlich funktionieren, einen füllenden Glaseffekt auf dem Bildschirm des Telefons zu haben.Ändern der Höhe von UIProgressView in Swift

ich gedreht es ziemlich harmlos von self.masteryProgress.transform = CGAffineTransformMakeRotation((CGFloat(-90)/CGFloat(180.0) * CGFloat(M_PI)))

mit mir die Größe der Ansicht, bekam den Bildschirm mit view.bounds versuchen Umhüllen den rect und die Breite x Höhe zu erhalten. Also bin ich nicht dort festgefahren.

Ich habe versucht mit .frame.drawRect aber wenn ich diese benutze es entweder bricht sie oder tut nichts.

Das Höhenattribut scheint in interfaceBuilder mit einem konstanten Wert von 2 gesperrt zu sein.

Irgendwelche Lösungen, bevor ich eine benutzerdefinierte Animation erstelle?

Ich habe versucht, die Höhe der Fortschrittsbalken in interfaceBuilder wie einige andere Posts sagte, aber ich muss die Fortschrittsanzeige den gesamten Bildschirm ausfüllen, egal welches Gerät es läuft, so dass die Lösung in meinem Fall nicht funktioniert .

I am Ende mit CGAffineTransformScale(masteryProgress.transform, view.bounds.height/1334, (view.bounds.width/2))

Da ich die progressView vertikal rotierenden bin, stelle ich die Fortschritte im Hinblick auf eine Breite von 1334 (die Höhe des iPhone 6 Plus) und eine Höhe von 2. Durch Dividieren Die Höhe des Bildschirms durch diese Werte sollte auf jedes Telefon perfekt angepasst werden.

+0

möglich Duplikat [Fortschritt Ansicht Höhe in iOS 7] (http://stackoverflow.com/questions/18717895/progress-view-height-in-ios-7) –

+0

Plesae Überprüfen Sie die vorherige Frage. Der automatische Layout-Modus kann auch im Storyboard angewendet werden. –

+0

@WonjugKim Das ist gut und alles, aber ich brauche es, um die Größe des Bildschirms zu ändern und Interface-Builder können Sie nur statisch die Größe ändern. –

Antwort

55

Sie können es durch gesetzt skalieren seine Transformation in etwa so:

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

Ich benutzte CGAffineTransformMakeScale vorher. Vielen Dank! –

+0

Hallo, ich versuche diesen Code für meine Bar zu benutzen, aber leider füllt sich meine diagonal ... irgendwelche Ideen? – dwinnbrown

+0

Wäre sehr dankbar, wenn du mal schauen könntest @Bannings http://stackoverflow.com/questions/31453454/swift-uiprogressview-fills-diagonal – dwinnbrown

6

Th wird funktionieren:

masteryProgress.transform = CGAffineTransformMakeScale(1, 4) 
12

Transform scheint immer noch der einzige Weg, dies zu erreichen. Versuchen Sie, es als Erweiterung zu UIProgressView wie folgt hinzuzufügen.

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

Wenn Sie UIProgressView mit dem Interface Builder hinzugefügt haben, erstellen Sie einfach eine Höhenbeschränkung und ändern Sie den Wert, den Sie benötigen. Das ist es.

3

In Swift 3 wurde es in CGAffineTransform geändert (scaleX: CGFloat, y: CGFloat).So würde Code sein:

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

hi! ... wenn ich CGAffineTransform für progressview benutze und iphone im Querformat umgebe, setzt die progressview-bar die Waage zurück. warum ?! – mrk182

2

In Swift Version 3.0.2 verwenden diese:

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