1

UISliderファーストレスポンダーとして設定し、その現在の値をプログラムで現在のタッチの場所に設定することは可能ですか?

アプリの設定方法には、UIView画面全体を占めるコンテナーがあります。コンテナ内のUIView下端に別のオフスクリーンがあります(これをbottomBarと呼びます)。bottomBarの内側にUISlider要素があります。

ユーザーが画面の下端に沿ってスワイプすると、スライダー付きのbottomBarがビューに移動するという考え方です。私が達成しようとしているのは、をアクティブにしてUISlider、スライダーの位置(値)をユーザーがタッチする位置に設定することです。これは可能ですか?

私はこれを成し遂げるためにかなり醜いハックを見つけました。しかし、これよりもエレガントなソリューションが必要ですか?

CGPoint sliderPos = [touch locationInView:pageSlider];
float newSliderValue = sliderPos.x/pageSlider.frame.size.width*pageSlider.maximumValue;
if (sliderPos.x<=0) {
    pageSlider.value = 0;
}
else if(newSliderValue>=pageSlider.maximumValue) {
    pageSlider.value = pageSlider.maximumValue;
}
else {
    pageSlider.value = newSliderValue;  
}

上記のコードで私が抱えている2つの特定の問題は、a)親指の長さを無視するため、親指が正確に正しく配置されないことと、b)親指が動くときに強調表示されないことです。

4

1 に答える 1

0

このメソッド- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)valueを使用して、親指のサイズを取得し、それを考慮に入れることができます。

ただし、親指を強調表示する方法はわかりません。highlighted設定やtrueの設定、スライダーのselected呼び出しなど、通常のことをすべて試したと思いますか?becomeFirstResponder

beginTrackingWithTouch:withEvent:メソッドやその他の関連するメソッドを介してすべてのUITouchイベントをスライダーに渡すことで、スライダーをだましてタッチされていると思わせることができる場合があります。

于 2010-03-18T02:07:03.340 に答える