MPVolumeView 更改 Airplay 图标的大小

6

我在一个视图中有一个MPVolumeView,当有其他输出源可用时,会出现一个Airplay图标。这没问题,但是不管我将MPVolumeView的框架设置多大,图标始终很小。

有人知道如何增加Airplay图标的大小吗?


1
我的建议没有帮到你吗? :) - Kristofer Sommestad
3个回答

19

我这样做只是为了显示图标并增加它的大小:

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%

一个简单的转换...我很生气错过了它。谢谢,它完美地工作了。 - goto_10
请注意,在iOS 5.1中,MPVolumeView的位置似乎略有改变。当使用1.5倍比例变换时,我不得不将位置向右移动1.5倍,向下移动0.5倍。 - Kristofer Sommestad
谢谢这个...不过我还是忍不住对苹果感到失望,因为他们没有按照我的期望制作'sizeToFit'函数。我难道不能设置MPVolumeView的框架、其中的组件,然后调用[view sizeToFit],让它最大化地适应定义的区域吗?不过,我很高兴你找到了一个解决方法,我开始怀疑自己是否被大小困住了。 - MobileVet
谢谢你!! - KarenAnne
iOS 12,而且这仍然是唯一的解决方案。 - kikeenrique

0

目前至少可以通过遍历子视图并手动设置大小来实现。这可能不是一个好主意,因为子视图层次结构容易发生变化,即使您为图标设置了更大的框架,它也不会变得更大(或者如果contentMode设置为stretch,则会得到模糊的图标)。

您甚至可以手动使用应用程序中提供的更大图标替换图标,但让我再说一遍,这不是一个好主意。


0

通过爬取子视图并使用约束,我已经成功复制了AVRoutePickerView的行为,该行为根据其包含视图调整图标图像的大小。

尽管需要通过setRouteButtonImage(第二个图像)使用自定义图标。如果不这样做,它将使用两个不显示调整后的图标的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
            }
        }
    }
}

Using system icon Using custom icon


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接