2012-06-27 40 views
7

Tôi đang xây dựng một ứng dụng cần MPVolumeView để điều khiển âm lượng. Nó hoạt động hoàn hảo trước iOS 5.1 nhưng kể từ khi bản cập nhật 5.1 hình ảnh ngón tay cái không còn được căn giữa theo chiều dọc. Tôi đã thử một vài thứ như thay đổi kích thước tưởng tượng, thay đổi kích thước quan điểm của tôi (và thanh trượt) nhưng không có gì có vẻ hiệu quả, ngón tay cái chỉ là không thẳng đứng ở giữa nữa. Cách duy nhất tôi nhận được một ngón tay cái trung tâm là nếu tôi sử dụng iOS mặc định.MPVolumeView tùy chỉnh Hình ảnh không theo chiều dọc được làm thẳng đứng từ iOS 5.1

Tôi đã thử thêm UISlider vào chế độ xem khác với hình ảnh min, max và thumb chính xác và hình ảnh đó được căn giữa.

Đây là mã cho MPVolumeView:

MPVolumeView *volumeView; 
volumeView = [[[MPVolumeView alloc] initWithFrame:volumeViewHolder.bounds] autorelease]; 
[volumeViewHolder addSubview:volumeView]; 

UIView *volumeViewSlider; 
for (UIView *view in [volumeView subviews]) 
{ 
    if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) 
    { 
     volumeViewSlider = view; 
    } 
} 

[(UISlider *)volumeViewSlider setThumbImage:sliderHandleIcon forState:UIControlStateNormal]; 
    [(UISlider *)volumeViewSlider setMinimumTrackImage:leftTrackImage forState:UIControlStateNormal]; 
    [(UISlider *)volumeViewSlider setMaximumTrackImage:rightTrackImage forState:UIControlStateNormal]; 

volumeViewHolder chỉ là một UIView thats 153x33. Tôi đặt ngón tay cái màu xanh lục trong ảnh chụp màn hình. enter image description here

+0

Tôi gặp vấn đề tương tự, [Daniel Amitay] (http://stackoverflow.com/users/314042/daniel-amitay) đã chỉ cho tôi giải pháp: http://tibr.me/2012/07/14/ tùy biến-mpvolumeview-xuất hiện/ – murze

+0

Đó không phải là một giải pháp tuyệt vời vì nó thay thế việc thực hiện MPVolumeSlider cho tất cả MPVolumeSlider. Điều này gây ra một bù đắp trong thanh trượt MPMoviePlayerViewController chúng tôi sử dụng để chơi phương tiện truyền thông khác. –

+0

@murze: Đó là một hack nếu tôi từng thấy! Điều này có được chấp nhận bởi Apple không? – Nailer

Trả lời

4

Có lẽ một giải pháp tốt hơn:

tài một hình ảnh lớn hơn với viền trong suốt ở phía dưới. Nên có khoảng 10px cho màn hình Retina.

+0

Làm việc như một sự quyến rũ! –

0

cùng một vấn đề tôi đã giải quyết trong một dự án. Phải được thiết lập màu sắc của phần bên trái và phần bên phải với alpha = 0 -it có nghĩa là minh bạch tất cả các thanh trượt mà không có ngón tay cái (không có phần moovable của nó). Sau khi chúng ta phải tạo chế độ xem tùy chỉnh cho dòng của thanh trượt, không có ngón tay cái. Trong chế độ xem này, bất kỳ phần màu nào cũng có thể được dịch chuyển theo ý muốn của bạn, trên hoặc dưới, trái hoặc phải. Nó thu được bằng cách sử dụng y được xác định cho ocassion của bạn:

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(x,y,width, height)]; 

Và thêm thanh trượt vào dòng này làm chế độ xem phụ. Chế độ xem kết quả sẽ là thanh trượt. Ví dụ:

UISlider *ourSlider = ...; 
//initialise UISlider 

ourSlider.minimumTrackTintColor = [UIColor colorWithRed:0 green:122.0f/255.0f blue:1 alpha:0]; 

ourSlider.minimumTrackTintColor = [UIColor colorWithRed:0 green:122.0f/255.0f blue:1 alpha:0]; 

UIView *lineOfSliderWithoutThumb = ... ; 
// creation it 

[lineOfSliderWithoutThumb addSubview:ourSlider]; 

// sau dòng nàyOfSliderWithoutThumb là uislider tùy chỉnh của chúng tôi. Lưu ý: màu sắc được sử dụng làm màu mặc định của các cạnh trái và phải của UISlider.

+0

dành cho iOS 8 và iOS 7 – akr