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:
auf 6S Plus-:
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?
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. –
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' –
@RyanCollins Ich möchte nicht, dass es exakt der Bildhöhe entspricht. Das Bild hat etwas Leerraum, mit dem ich nicht übereinstimmen muss. –