Tôi đang cố gắng triển khai UISlider tùy chỉnh (lớp con của UISlider), hoạt động theo cách tương tự với thanh trượt gốc có ánh sáng xung quanh ngón tay cái khi được đánh dấu. Tôi đang gặp rắc rối với điều này, mặc dù.Trạng thái đánh dấu UISlider với chiều rộng ngón tay cái khác so với bình thường
Chiều rộng (hiệu dụng) của ngón tay cái được đánh dấu rõ ràng là lớn hơn ngón cái bình thường (do ánh sáng). Nếu tôi thêm ảnh điểm ảnh trong suốt vào hình ảnh trạng thái bình thường, để cả hai hình ảnh có cùng chiều rộng, vấn đề là ngón tay cái trạng thái bình thường không bao giờ giống như nó đến cuối bản nhạc. nó xuất hiện khác).
Nếu tôi sử dụng thumbRectForBounds: để bù ngón tay cái thẳng hàng với đầu bài hát, nó chỉ làm cho vấn đề tồi tệ hơn ở đầu kia.
Nếu tôi giữ cả hai hình ảnh chỉ rộng như chúng cần (nghĩa là, không có đệm trên trạng thái bình thường và cả hai không có cùng chiều rộng), tôi đã tiến gần hơn. Tôi có thể thiết lập bù đắp một cách độc lập trong thumbRectForBounds: dựa trên UIControl.state, nhưng có vẻ như có một số phép thuật toán học đang diễn ra đằng sau hậu trường. Nơi duy nhất mà UISlider cho rằng hình ảnh cho cả hai trạng thái xếp hàng hoàn hảo là trung tâm chính xác.
Dường như tôi có thể cần phải thực hiện một số phép tính xác định độ lệch của trạng thái đánh dấu dựa trên vị trí tương đối của nó dọc theo tuyến đường. Nó sẽ cần một y-bù đắp bằng không ở trung tâm (UISlider sẽ tập trung cả hai hình ảnh, có nghĩa là họ sắp xếp). Ở thái cực, nó sẽ cần một y-bù đắp hoàn toàn cho ánh sáng. Và ở giữa nó sẽ cần phải nội suy y-bù đắp.
Điều này có vẻ như rất nhiều công việc để tạo lại một cái gì đó thanh trượt gốc mặc dù, vì vậy có lẽ tôi đang thiếu một cái gì đó hiển nhiên.
Cập nhật giải pháp hiện tại:
Đó không phải là hoàn toàn di động, vì nó làm cho một số giả định về kích thước của ánh sáng được bổ sung. Tôi đang thêm ánh sáng với hình ảnh thay vì vẽ trực tiếp lên CALayer. Tôi chưa thử nghiệm hiệu suất này. Về cơ bản, tôi tạo một lớp là hình vuông có kích thước là chiều cao của hình ảnh ngón tay cái trạng thái mặc định, đặt nó trên ngón tay cái và sau đó vẽ ánh sáng (chỉ là ánh sáng, không phải là hình ảnh riêng biệt của ngón cái với ánh sáng rực rỡ. , như sẽ được thực hiện với một hình ảnh trạng thái cao) vào lớp.
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value {
CGRect r = [super thumbRectForBounds:bounds trackRect:rect value:value];
[thumbHighlightOverlayLayer removeFromSuperlayer];
thumbHighlightOverlayLayer = [CALayer layer];
int x = r.origin.x + (r.size.width/2) - (r.size.height/2);
thumbHighlightOverlayLayer.frame = CGRectMake(x, r.origin.y, r.size.height, r.size.height);
UIImage* thumbHighlightOverlayImage = [UIImage imageNamed:@"thumb-highlight"];
thumbHighlightOverlayLayer.contents = (id)thumbHighlightOverlayImage.CGImage;
switch (self.state) {
case UIControlStateHighlighted:
[[self layer] addSublayer:thumbHighlightOverlayLayer];
break;
default:
break;
}
return r;
}
http://stackoverflow.com/questions/755510/customizing-uislider-look – VSN
Câu hỏi chủ yếu liên quan đến hình ảnh bản nhạc chứ không phải hình ảnh ngón tay cái. Viết thanh trượt của riêng tôi vẫn có thể là câu trả lời duy nhất ở đây, nhưng vì tôi đang cố gắng tạo lại hành vi gốc, tôi vẫn tự hỏi liệu có cách nào để tránh cần phải làm điều đó không. – farski