2016-05-25 56 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.height以及使用AVMakeRectWithAspectRatioInsideRect。圖像跨越設備的寬度。以下是圖像的條子的一些截圖:

上6S:

6S
6S Band Sizes

上6S加:

6S Plus 的5S:

5S

正如您所看到的,該條不與背景圖像的淡褐色部分正確對齊,而且水平位置也會關閉。我曾認爲使用百分比可以通過縮放來保持適當的對齊,但我想我錯了。

有沒有人有這方面的經驗,可能能夠看到我做錯了什麼?

+0

我不確定你應該使用'let barHeight = imageHeight * 0.85',如果你想要它等於圖像高度。您應該使用大小類以編程方式查看。 –

+0

爲什麼不使用自動佈局?你在哪裏得到0.85的計算? 如果你想這樣做,請'let barHeight = screenHeight * 0.85' –

+0

@RyanCollins我不希望它完全等於圖像高度。圖像有一些我不需要匹配的空白區域。 –

回答

0

我通過使用寬度的百分比作爲我的酒吧的高度,我得到了我的縮放工作。這僅適用於圖像設置爲Aspect Fit並且與屏幕寬度相同的情況。

這是一個醜陋的解決方案,只適用於一組特定的應用程序。看起來好像圖像大小不適用於比較或不返回與不同設備有關的適當大小。我還沒有弄清楚爲什麼我的原始邏輯不起作用。