18

「親指の画像」のサイズが原因で、指の大きな人がつかんでスライドするのが比較的難しいカスタムUISliderがあります。画像のサイズを変更せずに、クリック可能/ドラッグ可能な領域のサイズを大きくする方法はありますか?

それが役立つ場合、カスタムスライダーを作成するためのコードは次のとおりです。

[slider setMaximumTrackImage:[[UIImage imageNamed:@"max.png"]
                                             resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 20)]
                                   forState:UIControlStateNormal];
[slider setMinimumTrackImage:[[UIImage imageNamed:@"min.png"]
                                             resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 20)]
                                   forState:UIControlStateNormal];
[slider setThumbImage:[UIImage imageNamed:@"thumb.png"]
                            forState:UIControlStateNormal];
4

6 に答える 6

27

UISlider をサブクラス化し、このメソッドをオーバーライドすることになりました。

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event {
    CGRect bounds = self.bounds;
    bounds = CGRectInset(bounds, -10, -15);
    return CGRectContainsPoint(bounds, point);
}

これにより、タッチ可能な領域が左右で 10 ピクセル、上下で 15 ピクセル拡張されます。

于 2012-11-15T20:10:36.743 に答える
3

私はこれを使用することになりましたが、私にとってはかなりうまく機能します。

誰かに役立つように、この回答を投稿しました。

import UIKit

class CustomSlider: UISlider {

/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
    // Drawing code
}
*/
// Increase slider height
   override func trackRect(forBounds bounds: CGRect) -> CGRect {
    let customBounds: CGRect = CGRect(origin: bounds.origin, size: CGSize(width: bounds.size.width, height: 5.0))
    return customBounds
}



override func thumbRect(forBounds bounds: CGRect, trackRect rect: CGRect, value: Float) -> CGRect {
    return super.thumbRect(
        forBounds: bounds, trackRect: rect, value: value)


}

// Increase Thumb hot spot clickable area
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    var bounds: CGRect = self.bounds
    bounds = bounds.insetBy(dx: -10, dy: -10);
    return bounds.contains(point);

}

override func awakeFromNib() {
    // Configure Volume slider
    let thumbImageNormal = UIImage.init(named:"thumb")
    self.setThumbImage(thumbImageNormal, for: .normal)

    super.awakeFromNib()
}

}
于 2016-09-09T12:45:32.897 に答える
1

また、スライダーのサムサイズの増加につながる画像サイズを増やすこともできます。

  1. 画像サイズを大きくしすぎず、スライダーのサイズを調整する必要がある場合は、画像コンテンツの周りに透明なスペースを追加してください。 ここに画像の説明を入力

  2. UITableViewCell でスライダーを使用している場合、問題は、スライダーの直前のテーブルビュー ハンドル ジェスチャです。これを変更するには、次のソリューションを使用します: https://stackoverflow.com/a/37751635/2150954 彼のコードを Objective C に変換することはそれほど難しくないと思います。

于 2016-11-22T08:23:46.800 に答える
-1

フレームのサイズを変更し、画像の位置合わせを目的の位置に変更します。配置は、中央、左、右、上、または下にすることができます。このようにします:

CGRect newFrame = sliderHandle.frame;
CGRectSetWidth(newFrame, 80);
CGRectSetHeight(newFrame, 80);
[sliderHandle setFrame:newFrame];
[sliderHandle setContentMode:UIViewContentModeCenter];

そのため、タッチするフレームは大きくなり、画像のスケールは変わりません。

于 2012-11-07T13:38:54.990 に答える