2010-09-28 48 views
19

Tôi đã thử nhiều phương pháp để thực hiện thường xuyên UISlider và điều khiển âm lượng thiết bị, nhưng đó là tất cả các hàm Native-C dẫn đến nhiều lỗi không thể tháo rời.Làm thế nào để tùy chỉnh MPVolumeView?

Tôi đã thử số MPVolumeView nó hoạt động như sự quyến rũ, thậm chí nó còn điều khiển âm lượng thiết bị ngay cả sau khi bạn đóng ứng dụng, giống như ứng dụng iPod.

Câu hỏi của tôi là, có cách nào để tùy chỉnh MPVolumeView với màu sắc và hình ảnh cụ thể, giống như UISlider?

LƯU Ý: Tôi muốn có phương thức pháp lý mà không sử dụng API không có giấy tờ tùy thân.

CẬP NHẬT
Theo @Alexsander Akers câu trả lời, vì quan điểm phụ được ẩn trong MPVolumeView tôi phải chu kỳ thông qua subviews, có UISlider và tùy chỉnh nó, đây là mã.

IBOutlet UISlider *volumeSlider; //defined in <class.h> and connected to a UISlider in Interface Builder 

-(void) viewDidLoad { 
    .... 
    [self setCustomSlider]; 
    .... 
} 

-(void) setCustomSlider{ 
    MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:[volumeSlider frame]] autorelease]; 
    NSArray *tempArray = volumeView.subviews; 

    for (id current in tempArray){ 
      if ([current isKindOfClass:[UISlider class]]){ 
        UISlider *tempSlider = (UISlider *) current; 
        UIImage *img = [UIImage imageNamed:@"trackImage.png"]; 
        img = [img stretchableImageWithLeftCapWidth:5.0 topCapHeight:0]; 
        [tempSlider setMinimumTrackImage:img forState:UIControlStateNormal]; 

        [tempSlider setThumbImage:[UIImage imageNamed:@"thumbImage.png"] forState:UIControlStateNormal]; 

      } 
    } 
    [volumeSlider removeFromSuperview]; 
    [self.view addSubview:volumeView]; 
} 
+0

Well done. Công việc tốt đẹp đang cập nhật câu hỏi của bạn. –

+5

Chỉ vì tò mò, điều này có được chấp nhận trong App Store không? – sooper

+0

@sooper trả lời rất muộn, xin lỗi. Thật không may, tôi đã không tiếp tục ứng dụng này và không bao giờ gửi nó đến App Store.Nhưng từ kinh nghiệm cá nhân, tôi đã thấy nhiều hướng dẫn sửa đổi các thành phần ban đầu và chúng đã được chấp nhận. – medopal

Trả lời

10

Bạn có thể thử chuyển qua các bản xem con của nó và tìm lớp con UISlider?

+1

Cuối cùng đó chính xác là những gì tôi đã sử dụng, Chỉ cần làm rõ tôi sẽ cập nhật câu hỏi bằng mã. Tôi hy vọng Apple không từ chối ứng dụng cho điều đó. – medopal

7

Kể từ iOS 5.0 bạn có thể sử dụng UIAppearance trên UISlider, ngay cả khi một phần của MPVolumeView.

Anywhere trong codebase của bạn:

[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMinimumTrackImage:[[UIImage imageNamed:@"nowplaying_bar_full.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 25, 5, 25)] forState:UIControlStateNormal]; 
[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMaximumTrackImage:[[UIImage imageNamed:@"nowplaying_bar_empty.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 25, 5, 25)] forState:UIControlStateNormal]; 
[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setThumbImage:[UIImage imageNamed:@"nowplaying_player_nob.png"] forState:UIControlStateNormal]; 

Dưới đây là một danh sách của một số các lớp học khác có thể được thực hiện bằng UIAppearance: https://gist.github.com/mattt/5135521

+0

Không hoạt động trên iOS 7 –

+0

Làm việc trên iOS 8 hoàn hảo! – Genevios

3

Hiện nay nhiều cách để thực hiện điều này, chỉ cần sử dụng:

– setMaximumVolumeSliderImage:forState: 
– setMinimumVolumeSliderImage:forState: 
– setVolumeThumbImage:forState: 

Tên phương pháp hơi khác so với tên của vanilla UISlider.

Điều này ngăn bạn không phải quay vòng qua các chế độ xem và có khả năng xảy ra sự cố trong tương lai khi Apple thay đổi mọi thứ.

0

trả lời trong Swift:

func customSlider() { 
     let temp = mpVolView.subviews 
     for current in temp { 
      if current.isKind(of: UISlider.self) { 
       let tempSlider = current as! UISlider 
       tempSlider.minimumTrackTintColor = .yellow 
       tempSlider.maximumTrackTintColor = .blue 
      } 
     } 
    } 

Kết quả:

enter image description here

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