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 x и -0,5 y, когато използвах трансформация в мащаб 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 е настроен да се разтяга, получавате замъглена икона)

Може дори да сте в състояние да ръчно замените иконата с по-голяма, която вие предоставяте в приложението си, но нека повторя това, не е добра идея.

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