MPVolumeView изменить размер значка Airplay

У меня есть MPVolumeView в одном из моих представлений, который появляется со значком Airplay, когда доступны другие источники вывода. Это все хорошо, но значок крошечный, независимо от того, насколько большой я установил рамку для MPVolumeView, он не становится больше.

Кто-нибудь знает, как увеличить размер значка трансляции?


person rustyshelf    schedule 08.02.2011    source источник
comment
Мое предложение не помогло? :)   -  person Kristofer Sommestad    schedule 20.04.2012


Ответы (3)


Я сделал это, чтобы просто показать значок и увеличить его размер:

MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:CGRectMake(255, 12, 30, 25)] autorelease];
volumeView.showsVolumeSlider = NO;
volumeView.showsRouteButton = YES;
volumeView.transform = CGAffineTransformMakeScale(1.5, 1.5); // increase size by 50%
person Kristofer Sommestad    schedule 13.01.2012
comment
Простое преобразование... Дам разозлился, что я пропустил это. Это сработало отлично спасибо - person goto_10; 20.03.2012
comment
Обратите внимание, что положение MPVolumeView немного изменилось в iOS 5.1. Мне пришлось подтолкнуть положение в 1,5 раза и -0,5 года при использовании преобразования в масштабе 1,5. - person Kristofer Sommestad; 20.03.2012
comment
Спасибо за это ... Я не могу не расстраиваться из-за того, что Apple не делает функцию «sizeToFit», как я ожидаю. Разве я не могу установить рамку MPVolumeView, какие компоненты в ней находятся, а затем вызвать [view sizeToFit] и увеличить ее размер, чтобы он поместился в определенной области? Определенно рад, что вы нашли обходной путь, хотя я начал задаваться вопросом, не застрял ли я с размером. - person MobileVet; 23.03.2012
comment
Спасибо за это!! - person KarenAnne; 16.04.2018
comment
ios 12 и до сих пор это единственное решение - person kikeenrique; 05.11.2018

По крайней мере, на данный момент все, что вы можете сделать, это просканировать подвиды и вручную установить размер. Вероятно, это не очень хорошая идея, так как иерархия подвидов может измениться, и даже если вы установите большую рамку для значка, он не станет больше (или если для contentMode установлено значение stretch, вы получите размытый значок)

Вы даже можете вручную заменить значок на более крупный, который вы предоставляете в своем приложении, но позвольте мне еще раз повторить: это не очень хорошая идея.

person steipete    schedule 27.08.2011

Просматривая подпредставления и используя ограничения, мне удалось воспроизвести поведение AVRoutePickerView, которое изменяет размер изображения значка в соответствии с его содержащим представлением.

Хотя необходимо использовать собственный значок через setRouteButtonImage (второе изображение). Если нет, он использует 2 ImageView, которые не показывают измененный размер иона (первое изображение).

Иерархия кода и представления прилагается далее:

class ViewController: UIViewController {

    @IBOutlet weak var airplayView: MPVolumeView!

    override func viewDidLoad() {
        super.viewDidLoad()
        airplayView.showsRouteButton = true
        airplayView.showsVolumeSlider = false
        airplayView.setRouteButtonImage(UIImage(named: "airplay"), for: .normal)
        for view in airplayView.subviews {
            if let button = view as? UIButton {
                button.imageView?.contentMode = .scaleAspectFit
                button.translatesAutoresizingMaskIntoConstraints = false
                NSLayoutConstraint(item: button,
                                   attribute: NSLayoutConstraint.Attribute.bottom,
                                   relatedBy: NSLayoutConstraint.Relation.equal,
                                   toItem: airplayView,
                                   attribute: NSLayoutConstraint.Attribute.bottom,
                                   multiplier: 1,
                                   constant: 0).isActive = true
                NSLayoutConstraint(item: button,
                                   attribute: NSLayoutConstraint.Attribute.trailing,
                                   relatedBy: NSLayoutConstraint.Relation.equal,
                                   toItem: airplayView,
                                   attribute: NSLayoutConstraint.Attribute.trailing,
                                   multiplier: 1,
                                   constant: 0).isActive = true
                NSLayoutConstraint(item: button,
                                   attribute: NSLayoutConstraint.Attribute.top,
                                   relatedBy: NSLayoutConstraint.Relation.equal,
                                   toItem: airplayView,
                                   attribute: NSLayoutConstraint.Attribute.top,
                                   multiplier: 1,
                                   constant: 0).isActive = true
                NSLayoutConstraint(item: button,
                                   attribute: NSLayoutConstraint.Attribute.leading,
                                   relatedBy: NSLayoutConstraint.Relation.equal,
                                   toItem: airplayView,
                                   attribute: NSLayoutConstraint.Attribute.leading,
                                   multiplier: 1,
                                   constant: 0).isActive = true
            }
        }
    }
}

Используя системный значок Использование собственного значка

person kikeenrique    schedule 07.11.2018