我在一个视图中有一个MPVolumeView,当有其他输出源可用时,会出现一个Airplay图标。这没问题,但是不管我将MPVolumeView的框架设置多大,图标始终很小。
有人知道如何增加Airplay图标的大小吗?
我在一个视图中有一个MPVolumeView,当有其他输出源可用时,会出现一个Airplay图标。这没问题,但是不管我将MPVolumeView的框架设置多大,图标始终很小。
有人知道如何增加Airplay图标的大小吗?
我这样做只是为了显示图标并增加它的大小:
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%
MPVolumeView
的位置似乎略有改变。当使用1.5倍比例变换时,我不得不将位置向右移动1.5倍,向下移动0.5倍。 - Kristofer Sommestad目前至少可以通过遍历子视图并手动设置大小来实现。这可能不是一个好主意,因为子视图层次结构容易发生变化,即使您为图标设置了更大的框架,它也不会变得更大(或者如果contentMode设置为stretch,则会得到模糊的图标)。
您甚至可以手动使用应用程序中提供的更大图标替换图标,但让我再说一遍,这不是一个好主意。
通过爬取子视图并使用约束,我已经成功复制了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
}
}
}
}