Iphone UIPickerView:在旋转时获取行值?

Iphone UIPickerView:在旋转时获取行值?,iphone,uipickerview,Iphone,Uipickerview,我想在iPhone用户在UIPickerView中旋转轮子时实时获取行值(不仅仅是当轮子停在特定行上时)。我研究了UIPickerView的子类化,然后重写了mouseDown方法,但我无法实现这一点。任何建议都将不胜感激。UIPickerView维度相当一致。不必将其子类化,也许您可以将自己的ui视图覆盖在选择器视图的顶部,从中可以跟踪和测量拖动运动,然后再将这些接触传递到选择器视图 或许可以尝试实现委托方法: - (UIView *)pickerView:(UIPickerView *)pi

我想在iPhone用户在UIPickerView中旋转轮子时实时获取行值(不仅仅是当轮子停在特定行上时)。我研究了UIPickerView的子类化,然后重写了mouseDown方法,但我无法实现这一点。任何建议都将不胜感激。

UIPickerView维度相当一致。不必将其子类化,也许您可以将自己的
ui视图
覆盖在选择器视图的顶部,从中可以跟踪和测量拖动运动,然后再将这些接触传递到选择器视图

或许可以尝试实现委托方法:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

您可以将其视为传递(只是传回reusingView参数)但每次调用它时,您都会知道用户滚动时屏幕上出现了视图-然后您可以计算出中心视图与此视图的偏移量。

您可以通过以下方法在UIPickerView层次结构中找到UIScrollView:

func findScrollView(view:UIView) -> UIScrollView? {
    if view is UIScrollView {
        return view as? UIScrollView
    }
    for subview in view.subviews {
        if subview is UIView {
            let result = findScrollView(subview as UIView)
            if result != nil {
                return result
            }
        }
    }
    return nil
}
实施和设置UIScrollViewDelegate:

let scrollView = findScrollView(pickerView)
if scrollView != nil {
    scrollView!.delegate = self
}
并检测当前选定的项目:

func scrollViewDidScroll(scrollView: UIScrollView) {
    let offset = scrollView.contentOffset.y
    let index = Int(offset/itemHeight)
    if index >= 0 && index < items.count {
        let item = items[index]
        // do something with item
    }
}
func scrollViewDidScroll(scrollView:UIScrollView){
让offset=scrollView.contentOffset.y
let index=Int(偏移量/项目高度)
如果索引>=0&&index
除了在放开后,必须对任何给定阻力发生的旋转量进行反向工程之外……我不确定子类化方法是否会有任何不同。至少使用
UIView
方法,其代码可以更容易地用于其他目的。没错,任何只查看picker视图输入的方法都会有相同的问题。更简单的是:在该方法中,调用-(NSInteger)selectedRowInComponent:(NSInteger)组件,您将获得当前行并可以检索其值,而无需计算偏移量或担心选择器旋转的方式。