gpt4 book ai didi

ios - 从自定义 UIButton 呈现 AirPlay 路由选择器

转载 作者:行者123 更新时间:2023-12-01 16:13:52 27 4
gpt4 key购买 nike

我有一个程式化的 UIButton我想在点击时呈现标准 AirPlay 路由选择界面的子类。我知道AVRoutePickerView可用,但它似乎不提供任何自定义,除了在 iOS 上配置其色调和事件色调颜色。

有没有办法使用您自己的按钮显示路线选择器?

看来这个应用程序能够做到这一点:

enter image description here

最佳答案

由于 AVRoutePickerView 只是一个 View ,您可以将其添加到自定义按钮或在其顶部添加自定义 View 。这是一个非常粗略的例子

    let frame = CGRect(x: 50, y: 50, width: 100, height: 50)
let routePickerView = AVRoutePickerView(frame: frame)
routePickerView.backgroundColor = UIColor.clear
view.addSubview(routePickerView)
let label = UILabel(frame: routePickerView.bounds)
label.backgroundColor = .black
label.textColor = .white
routePickerView.addSubview(label)
label.text = "Rough"

我用我的例子匆匆说了你如何让它工作,按钮点击通过是敏感的,以及尝试使用手势识别器。但是,我想出了三种可以使用的替代方法。它们都依赖于将 View 作为 subview 添加到选择器中,如上所述。该 View 应该有 .isUserInteractionEnabled = true .我用 UILabel 进行了测试只需简单的 UIView , 它可能需要是没有触摸处理的东西所以避免 UIControl s。一旦你有了这个 View ,你就可以使用 touchesBegan touchesCancelledtouchesEnded做任何视觉调整或动画然后传递触摸。与往常一样,在摆弄自定义提供的控件时,这可能并不总是有效,但这目前对我有用,并且不使用私有(private) api,只是解决方法和一点运气。

使用自定义 UILabel 作为 subview
class CustomLabel: UILabel {

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
transform = .init(scaleX: 0.75, y: 0.75)
super.touchesBegan(touches, with: event)
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
transform = .identity
super.touchesEnded(touches, with: event)
}

override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
transform = .identity
super.touchesCancelled(touches, with: event)
}

}

使用 AVRoutePickerView 的子类
class CustomRoutePicker: AVRoutePickerView {

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
transform = .init(scaleX: 0.75, y: 0.75)
super.touchesBegan(touches, with: event)
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
transform = .identity
super.touchesEnded(touches, with: event)
}

override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
transform = .identity
super.touchesCancelled(touches, with: event)
}

}

将 UIViewController 与对 pickerView 的引用一起使用
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
pickerView?.transform = .init(scaleX: 0.75, y: 0.75)
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
pickerView?.transform = .identity
}

override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
pickerView?.transform = .identity
}

关于ios - 从自定义 UIButton 呈现 AirPlay 路由选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56297347/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com