ピッカーを使用して基本的な色のバーを回転させるアプリケーションで作業しています。これらのバーは、高さと一致し、背景画像の幅の特定の位置にあると考えられます。画像はスケーラブルなベクトルで、Aspect Fitに設定されています。画像には空白も含まれているため、バーは画像とまったく同じ高さに設定することはできません。バーを作成するには、簡単な長方形のUIView
を作成し、必要に応じて背景色を設定します。次のようにピッカー方法は次のとおりです。UIViewの高さがデバイス間の画像で正しくスケーリングされない
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
}
私はすべての成功せず、複数のメソッドを使用しているimageHeight
を計算します。私はmyImage.image.size.height
とAVMakeRectWithAspectRatioInsideRect
を直接使用しました。画像はデバイスの幅にまたがっています。ここでは、画像のスライバーのいくつかのスクリーンショットです:6S上
:6Sプラスに
:
5S上バーが背景画像の明るい部分と正しく整列していないことがわかります。さらに、水平位置もオフになっています。私はパーセンテージを使用してスケーリングによって適切なアライメントを維持すると思っていたが、私は間違っていたと思う。
誰かが私が間違っていることを見ることができるかもしれないこの経験がありましたか?
画像の高さと同じにしたい場合は、 'let barHeight = imageHeight * 0.85'を使用するかどうかはわかりません。サイズクラスを使用してプログラムで調べる必要があります。 –
なぜ自動レイアウトを使用しないのですか?あなたは0.85の計算をどこで手に入れましたか? このようにするには、 'let barHeight = screenHeight * 0.85'を実行してください。 –
@RyanCollins画像の高さと正確に同じにしたくありません。画像には、一致させる必要のない空白があります。 –