2016-05-25 5 views
-2

ピッカーを使用して基本的な色のバーを回転させるアプリケーションで作業しています。これらのバーは、高さと一致し、背景画像の幅の特定の位置にあると考えられます。画像はスケーラブルなベクトルで、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.heightAVMakeRectWithAspectRatioInsideRectを直接使用しました。画像はデバイスの幅にまたがっています。ここでは、画像のスライバーのいくつかのスクリーンショットです:6S上

:6Sプラスに

6S
6S Band Sizes

5S上

6S Plus

5S

バーが背景画像の明るい部分と正しく整列していないことがわかります。さらに、水平位置もオフになっています。私はパーセンテージを使用してスケーリングによって適切なアライメントを維持すると思っていたが、私は間違っていたと思う。

誰かが私が間違っていることを見ることができるかもしれないこの経験がありましたか?

+0

画像の高さと同じにしたい場合は、 'let barHeight = imageHeight * 0.85'を使用するかどうかはわかりません。サイズクラスを使用してプログラムで調べる必要があります。 –

+0

なぜ自動レイアウトを使用しないのですか?あなたは0.85の計算をどこで手に入れましたか? このようにするには、 'let barHeight = screenHeight * 0.85'を実行してください。 –

+0

@RyanCollins画像の高さと正確に同じにしたくありません。画像には、一致させる必要のない空白があります。 –

答えて

0

私はバーの高さとして幅のパーセンテージを使用することによってスケーリングが機能するようになりました。これは、画像が縦横比に設定され、画面と同じ幅であるためにのみ機能します。

これは醜い解決策であり、特定のアプリケーションにのみ有効です。画像のサイズが信頼できるものではなく、異なるデバイスに関連して適切なサイズが返されないようです。私の元の論理がうまくいかなかった理由を理解していない。

関連する問題