我如何聚焦 UIView?
How do I focus UIView?
我想实现单选按钮等功能。更具体地说,我想实现从多个 UIView
中仅 select 一个 UIView
的能力。这类似于 tvOS 上的 Focus Engine。
搜索相关内容时,发现UIKit
支持Focus-based Navigation。但我不确定这是否完全支持我想要的。也缺少额外的相关示例。
我想听听有关相关功能的一些帮助和建议。 基于焦点的导航 是否适合我追求的目的?还有其他好的方法可以实现我想实现的功能吗?
@Paulw 感谢您的帮助。
以下步骤解决了问题!
我用了一个简单的方法,在多个UIViews
中影响指定的UIView
。
import UIKit
class ViewController: UIViewController {
var selectView: UIView?
override func viewDidLoad() {
super.viewDidLoad()
selectView = self.view
let viw = UIView(frame: CGRect(x: 100, y: 100, width: 150, height: 150))
viw.backgroundColor = UIColor.white
viw.layer.cornerRadius = 10
self.view.addSubview(viw)
let objectView = ObjectView()
objectView.frame.size = CGSize(width: 150, height: 150)
objectView.backgroundColor = UIColor.clear
self.view.addSubview(objectView)
let tapObject = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
objectView.addGestureRecognizer(tapObject)
let tapObjects = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
viw.addGestureRecognizer(tapObjects)
let tapRootView = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
self.view.addGestureRecognizer(tapRootView)
}
@objc func handleTap(sender: UITapGestureRecognizer) {
if sender.state == .ended {
if selectView != self.view {
selectView?.layer.shadowColor = UIColor.clear.cgColor
}
selectView = sender.view
if selectView != self.view {
sender.view?.layer.shadowOffset = .zero
sender.view?.layer.shadowOpacity = 0.5
sender.view?.layer.shadowColor = UIColor.black.cgColor
}
}
}
}
我想实现单选按钮等功能。更具体地说,我想实现从多个 UIView
中仅 select 一个 UIView
的能力。这类似于 tvOS 上的 Focus Engine。
搜索相关内容时,发现UIKit
支持Focus-based Navigation。但我不确定这是否完全支持我想要的。也缺少额外的相关示例。
我想听听有关相关功能的一些帮助和建议。 基于焦点的导航 是否适合我追求的目的?还有其他好的方法可以实现我想实现的功能吗?
@Paulw 感谢您的帮助。
以下步骤解决了问题!
我用了一个简单的方法,在多个UIViews
中影响指定的UIView
。
import UIKit
class ViewController: UIViewController {
var selectView: UIView?
override func viewDidLoad() {
super.viewDidLoad()
selectView = self.view
let viw = UIView(frame: CGRect(x: 100, y: 100, width: 150, height: 150))
viw.backgroundColor = UIColor.white
viw.layer.cornerRadius = 10
self.view.addSubview(viw)
let objectView = ObjectView()
objectView.frame.size = CGSize(width: 150, height: 150)
objectView.backgroundColor = UIColor.clear
self.view.addSubview(objectView)
let tapObject = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
objectView.addGestureRecognizer(tapObject)
let tapObjects = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
viw.addGestureRecognizer(tapObjects)
let tapRootView = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
self.view.addGestureRecognizer(tapRootView)
}
@objc func handleTap(sender: UITapGestureRecognizer) {
if sender.state == .ended {
if selectView != self.view {
selectView?.layer.shadowColor = UIColor.clear.cgColor
}
selectView = sender.view
if selectView != self.view {
sender.view?.layer.shadowOffset = .zero
sender.view?.layer.shadowOpacity = 0.5
sender.view?.layer.shadowColor = UIColor.black.cgColor
}
}
}
}