【发布时间】:2016-05-25 19:30:07
【问题描述】:
我正在开发一个应用程序,该应用程序使用选择器在基本颜色条中旋转。这些条应该与高度匹配,并位于背景图像宽度的特定位置。该图像是一个可缩放的矢量并设置为 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。图像跨越设备的宽度。以下是部分图片的截图:
6S:
关于 6S Plus:
如您所见,该条与背景图像的浅褐色部分未正确对齐,此外,水平位置也已关闭。我曾认为使用百分比可以通过缩放保持正确对齐,但我想我错了。
有没有人有这方面的经验可以看出我做错了什么?
【问题讨论】:
-
如果您希望它等于图像高度,我不确定您是否应该使用
let barHeight = imageHeight * 0.85。您应该使用大小类以编程方式进行研究。 -
为什么不使用自动布局?你从哪里得到 0.85 的计算结果?如果您想这样做,请执行
let barHeight = screenHeight * 0.85 -
@RyanCollins 我不希望它完全等于图像高度。图像有一些我不需要匹配的空白。
-
您需要发布比上述更多的代码,这样社区才能确切地看到它是如何工作的以获得更好的答案。
-
@NikitaP 这些视图在选择器中并以编程方式完成。 IMAGE 的 0.85 与 6S 上的正确尺寸相匹配。我不明白你使用屏幕尺寸的逻辑。我是专门缩放到图像的条形