2016-05-25 9 views
-2

Ich arbeite an einer App, die einen Pflücker verwendet, um durch grundlegende Balken von Farben zu drehen. Diese Balken sollen der Höhe entsprechen und an bestimmten Stellen auf der Breite des Hintergrundbildes liegen. Das Bild ist ein skalierbarer Vektor und auf Aspect Fit eingestellt. Das Bild enthält auch etwas Leerraum, sodass die Balken nicht genau auf die gleiche Höhe wie das Bild eingestellt werden können. Um die Stäbe zu erstellen, habe ich einen einfachen rechteckigen UIView erstellt und die Hintergrundfarbe nach Bedarf festgelegt. Die Picker Methode ist wie folgt:UIView Höhe nicht richtig skalieren mit Bild über Geräte

imageSize = AVMakeRectWithAspectRatioInsideRect(myImage.image!.size, myImage.frame) 

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView { 

    let imageHeight = self.imageSize.height 
    let imageWidth = self.imageSize.width 

    let barWidth = imageWidth * 0.055 

    var frame: CGRect 

    switch component { 
    case 1: // First component needs to match tan portions height 
     let barHeight = imageHeight * 0.85 

     frame = CGRect(x: -barWidth/2, y: -barHeight/2, width: barWidth, height: barHeight) 
     break 
    case 3, 4, 5: // another part of image has different height 
     let barHeight = imageHeight * 0.64 

     frame = CGRect(x: -barWidth/2, y: -barHeight/2, width: barWidth, height: barHeight) 
     break 
    default: // return empty views for spacers 
     return UIView() 
    } 


    let stripe = UIView(frame: frame) 
    stripe.backgroundColor = getColor(component, row: row) 
    return stripe 

} 

die imageHeight Zur Berechnung ich mehrere Methoden verwendet habe, alle ohne Erfolg. Ich habe direkt die myImage.image.size.height sowie AVMakeRectWithAspectRatioInsideRect verwendet. Das Bild überspannt die Breite des Geräts. Hier sind einige Screenshots von einem Splitter des Bildes:

auf 6S:

6S
6S Band Sizes

auf 6S Plus-:

6S Plus auf 5S:

5S

Wie Sie sehen können, stimmt die Leiste nicht richtig mit dem hellen Bereich des Hintergrundbildes überein, außerdem ist die horizontale Position ebenfalls deaktiviert. Ich hatte gedacht, die Verwendung von Prozentsätzen würde die richtige Ausrichtung durch Skalierung beibehalten, aber ich glaube, ich lag falsch.

Hat jemand Erfahrung damit, die in der Lage sein zu sehen, was ich falsch gemacht habe?

+0

Ich bin mir nicht sicher, ob Sie "let barHeight = imageHeight * 0.85" verwenden sollten, wenn Sie der Bildhöhe entsprechen möchten. Sie sollten programmgesteuert nach Größenklassen suchen. –

+0

Warum verwenden Sie keine automatischen Layouts? und wo hast du die 0.85 Berechnung bekommen? Wenn du das so machen willst, lass 'barHeight = screenHeight * 0.85' –

+0

@RyanCollins Ich möchte nicht, dass es exakt der Bildhöhe entspricht. Das Bild hat etwas Leerraum, mit dem ich nicht übereinstimmen muss. –

Antwort

0

Ich habe meine Skalierung zu arbeiten, indem ich einen Prozentsatz der Breite als Höhe für meine Bars verwendet. Dies funktioniert nur, weil das Bild auf Aspect Fit eingestellt ist und dieselbe Breite wie der Bildschirm hat.

Dies ist eine hässliche Lösung und nur für bestimmte Anwendungen gültig. Es scheint, als ob die Bildgröße nicht zuverlässig ist, um die richtige Größe in Bezug auf verschiedene Geräte zu vergleichen oder nicht zurückzugeben. Ich habe nicht herausgefunden, warum meine ursprüngliche Logik nicht funktioniert hat.

Verwandte Themen