أكبر UISlider موافق ولكن منطقة تتبع المشكلة

StackOverflow https://stackoverflow.com/questions/1436021

  •  07-07-2019
  •  | 
  •  

سؤال

وهدفي هو خلق UISlider أكبر مع ارتفاع 35 بكسل للصورة الإبهام.

وأنا subclassed UISlider وأضاف الأسلوب:

- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, 50);
}

وبعد ذلك أنا وضعت صورة ثوم من وحدة تحكم بي باستخدام setThumbImage:

ويتم عرض جيد بلدي الإبهام أكبر.

والمشكلة لدي هو أن المنطقة تتبع لا تزال هي هي حوالي 19 ارتفاع بكسل، وكيفية توسيع نطاقه ليشمل 50؟

والشكر

وT.

هل كانت مفيدة؟

المحلول

وأعتقد أنك قد ترغب في النظر في thumbRectForBounds:trackRect:value:

نصائح أخرى

وهناك مشكلة طويلة الأمد مع سيطرة UISlider نظام التشغيل اي فون 'هو أنه لا يمكنك جعله أطول. وبشكل أكثر تحديدا، يمكنك جعلها تبدو أطول قامة لتحديد الصور لالإبهام والمسار، ولكن يبقى مجال تعمل باللمس كما 23px صغير طويل القامة.

مايكل Patricios وقد نشرت الطريقة لجعل المتزلجون الافتراضية أسهل كثيرا للمس، والاختلاف من هذا الأسلوب يمكن التعامل مع المتزلجون أكبر. ما عليك القيام به هو فرعية UISlider، وتجاوز pointInside في صفك:

// How many extra touchable pixels you want above and below the 23px slider
#define SIZE_EXTENSION_Y 10

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

في واجهة البناء، تعيين شريط التمرير لاستخدام الخاص بك فئة فرعية UISlider جديدة، وعليك الآن شريط التمرير مع 43px ارتفاع ملموس.

وأنا باستخدام هذا الحل:)

CGRect sliderFrame = self.mySlider.frame;    
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame];

وزيادة UISlider الإبهام المناطق تضررا من خلال زيادة ارتفاع الإطار UISlider. هذا النهج يتجنب أي حاجة تعويض واللاحقة لتصحيح إطار المنزلق.

- (void)viewDidLoad{
    [super viewDidLoad];

    //expand slider hit area
    self.slider.frame = CGRectInset(self.slider.frame, 0, -10);

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top