2009-09-16 31 views
10

Mục tiêu của tôi là tạo UISlider lớn hơn với chiều cao 35 pixel cho hình ảnh ngón tay cái.lớn hơn UISlider ok nhưng theo dõi vấn đề vùng

Tôi subclassed UISlider và bổ sung phương pháp:

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

Sau đó, tôi thiết lập các hình ảnh Thum từ bộ điều khiển của tôi sử dụng setThumbImage:

ngón tay cái lớn hơn của tôi được hiển thị tốt.

Vấn đề tôi có là vùng theo dõi vẫn giữ nguyên chiều cao khoảng 19 px, cách mở rộng đến 50?

Cảm ơn

T.

Trả lời

0

Tôi tin rằng bạn có thể muốn xem xét thumbRectForBounds:trackRect:value:

+2

Thật không may, UISlider không sử dụng hàm trả về từ hàm này để xác định vùng cảm ứng của ngón cái trượt. –

+0

cách gọi phương thức thumbRectForBounds, là phương thức UISlider Delegate? –

31

Một vấn đề tồn tại từ lâu với sự kiểm soát UISlider iPhone OS' là bạn không thể làm cho nó cao . Cụ thể hơn, bạn có thể làm cho nó trông cao hơn bằng cách chỉ định hình ảnh cao hơn cho ngón tay cái và đường đi của nó, nhưng khu vực cảm ứng vẫn ở mức cao 23px.

Michael Patricios has published a way để làm cho thanh trượt mặc định dễ dàng hơn nhiều khi chạm và biến thể của kỹ thuật đó có thể xử lý thanh trượt lớn hơn. Những gì bạn cần làm là lớp con UISlider, và ghi đè pointInside trong lớp học của bạn:

// 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); 
} 

Trong Interface Builder, thiết lập các thanh trượt để sử dụng lớp con UISlider mới của bạn, và bây giờ bạn có một thanh trượt với chiều cao có thể sờ 43px.

+2

Chỉnh nhỏ: Tôi nghĩ bạn muốn chuyển giá trị SIZE_EXTENSION_Y âm sang CGRectInset để làm cho giá trị lớn hơn. – Kelan

+3

Kelan là chính xác, giá trị của -10 hoạt động tốt. –

+1

Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn! Với một thiết lập -10 điều này đã làm việc hoàn hảo! Tôi đã cố gắng để giải quyết vấn đề này bản thân mình trong một thời gian, và điều này làm việc rất đẹp. –

11

Tôi đang sử dụng giải pháp này :)

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

giải pháp này có vẻ đơn giản hơn so với giải pháp của @Allen Pike. Có vẻ như nó cũng đang hoạt động. Có lý do nào mà câu trả lời của anh ta được ưa thích hơn bạn? – marcgg

+1

@marcgg Tôi nghĩ rằng đó là chỉ vì tôi đã thêm câu trả lời của tôi sau này ... – alexhajdu

+0

Điều này làm việc nhưng nó cũng bù đắp thanh trượt theo chiều dọc, nhưng điều đó đủ dễ dàng để sửa chữa. –

8

Tăng UISlider thumb khu vực hit bằng cách tăng chiều cao của khung UISlider. Cách tiếp cận này tránh được bất kỳ sự bù đắp nào và nhu cầu tiếp theo để sửa khung thanh trượt.

- (void)viewDidLoad{ 
    [super viewDidLoad]; 

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

} 
+0

Câu trả lời này dễ hơn nhiều so với hai câu hỏi trên. Hoạt động tuyệt vời. Cảm ơn! – chazzwozzer

+0

Giải pháp tuyệt vời – malaki1974

Các vấn đề liên quan