ビューの 1 つに MPVolumeView があり、他の出力ソースが利用可能な場合に Airplay アイコンが表示されます。それはすべて問題ありませんが、アイコンは小さく、MPVolumeView のフレームをどれだけ大きく設定しても、それ以上大きくなりません。
エアプレイアイコンのサイズを大きくする方法を知っている人はいますか?
ビューの 1 つに MPVolumeView があり、他の出力ソースが利用可能な場合に Airplay アイコンが表示されます。それはすべて問題ありませんが、アイコンは小さく、MPVolumeView のフレームをどれだけ大きく設定しても、それ以上大きくなりません。
エアプレイアイコンのサイズを大きくする方法を知っている人はいますか?
アイコンを表示してサイズを大きくするためにこれを行いました:
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%
少なくとも現時点では、サブビューをクロールして手動でサイズを設定することしかできません。サブビュー階層が変更される可能性があり、アイコンに大きなフレームを設定しても大きくならないため、おそらく良い考えではありません (または、contentMode がストレッチに設定されている場合、ぼやけたアイコンが表示されます)。
アイコンをアプリで提供する大きなアイコンに手動で置き換えることもできるかもしれませんが、もう一度言いますが、それは良い考えではありません。
サブビューをクロールし、制約を使用して、AVRoutePickerView の動作を複製することに成功しました。AVRoutePickerView は、含まれているビューに従ってアイコン イメージのサイズを変更します。
setRouteButtonImage(second image) を介してカスタム アイコンを使用する必要がありますが。そうでない場合は、サイズ変更されたイオンを表示しない 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
}
}
}
}