我正在开发一款应用程序,它使用拾取器旋转基本的颜色条。这些条应该与高度匹配,并且位于背景图像宽度上的特定位置。图像是可缩放的矢量,并设置为Aspect Fit。图像还包括一些空白区域,因此条形图不能简单地设置为与图像完全相同的高度。为了创建条形,我创建了一个简单的矩形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
。图像跨越设备的宽度。以下是图像条子的一些屏幕截图:
on 6S:
on 6S Plus:
如您所见,条形图与背景图像的浅棕褐色部分没有正确对齐,此外水平位置也关闭。我曾经以为使用百分比会通过缩放保持正确的对齐,但我想我错了。
有没有人有过这方面的经验,可能会看到我做错了什么?
答案 0 :(得分:0)
我通过使用宽度的百分比作为我的酒吧的高度来缩放工作。这仅仅是因为图像设置为Aspect Fit并且宽度与屏幕相同。
这是一个丑陋的解决方案,仅对特定的一组应用程序有效。似乎图像尺寸与不同设备相比较或不返回适当尺寸是不可靠的。我还没弄清楚为什么我的原始逻辑不起作用。