0

UI スライダーのハンドルを「つかむ」ためには、その上にタッチダウンする必要があります。ユーザーが uislider のどこにでもタッチするだけでよいように、動作を変更することに関心があります。タッチダウンすると、ユーザーがタッチしている位置にハンドルがジャンプします。これどうやってするの?

4

4 に答える 4

2

UISlider のサブクラスで touchesBegan:withEvent: をオーバーライドすることで実現しました。スライダーの上にいる場合にのみタッチイベントを取得するため、タッチがスライダーにどれだけ近いかを確認する必要はありません。このコードは、デフォルトの 0 から 1 のスケールで設定されたスライダーに対して機能します。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    float xPoint = [[[event allTouches]anyObject]locationInView:self].x;
    [self setValue:xPoint/self.frame.size.width];
    [super touchesBegan:touches withEvent:event];
}
于 2012-08-15T07:19:03.823 に答える
0

最小値または最大値の画像がある場合、rdelmarの答えは機能しません。rdelmarのtouchesBegan:withEvent:メソッドを変更して、余白ではなく、トラック上のタッチのみを表示するようにしました。

お役に立てれば

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    float xPoint = [[touches anyObject] locationInView:self].x;
    float trackWidth = [self trackRectForBounds:self.bounds].size.width;
    float margin = (self.bounds.size.width - trackWidth) / 2;
    float xOffset = xPoint - margin;

    if (xOffset >= 0.0 && xOffset <= trackWidth) {
        float newValue = xOffset / trackWidth;
        [self setValue:newValue animated:YES];
        [super touchesBegan:touches withEvent:event];
    }
}
于 2013-02-10T19:47:31.577 に答える
0

私の頭の上から、ビューへのタッチに注意する必要があると思います。タッチが検出されたら、本体との距離を確認しますUISlider。一定範囲内ならやる(疑似)

sliderValue = sliderMinValue + (sliderMaxValue-sliderMinValue)/(xCoordOfTouch - sliderLeftSideXCoord)/sliderLength

したがって、基本的には、スライダーのフレームに対してユーザーが触れた場所に基づいて、スライダーが持つべき値を計算しています。

私は今日同じことをしようと思っていたので、あなたがこれについて言及するのはおかしいです. もし私が何かを動かし始めたら、私はそれを投稿します(しかし息を止めないでください)。

于 2012-08-14T16:37:16.947 に答える