我正在努力研究用于“选择”UIViews的方法。在我的用户界面中,我有几个UIViews,我希望它是“可选择的”。选中后,我将拥有控件来执行基本调整,例如alpha(让用户知道选择了哪个视图),以及略微更高级的功能,例如显示一组独特的菜单项。一次只能选择1个视图。这里没有多点触控。
问题是,我只看到过UICollectionViewCells。我的界面没有使用集合视图,所以这是不可能的。
进入此问题的思维过程是1点击手势以“选择”uiview,然后通过点击视图边界之外“取消选择”它。
另一个思考过程是使用UIButtons而不是UIViews来利用Selected状态。
这将是更可行的解决方案吗?使用UIViews甚至可以实现这一点吗?或者我应该回溯并转而使用UIButtons?
感谢。
答案 0 :(得分:7)
您需要将手势识别器添加到所需的UIView
class ViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet weak var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
tap.delegate = self
myView.addGestureRecognizer(tap)
}
}
然后你需要添加代码来处理你的UIView发生在手势识别器功能中的任何事情:
func tap(_ gestureRecognizer: UITapGestureRecognizer) {
myView.alpha = 0.5
}
一旦UIView被选中,这将把UIView的alpha属性改为0.5。
现在,您可以使用手势识别器放置第二个UIView并使用alphas进行播放:
class ViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet weak var myView: UIView!
@IBOutlet weak var secondView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
tap.delegate = self
myView.addGestureRecognizer(tap)
let tap2 = UITapGestureRecognizer(target: self, action: #selector(self.tap2(_:)))
tap.delegate = self
secondView.addGestureRecognizer(tap2)
}
func tap(_ gestureRecognizer: UITapGestureRecognizer) {
myView.alpha = 0.5
secondView.alpha = 1
}
func tap2(_ gestureRecognizer: UITapGestureRecognizer) {
myView.alpha = 1
secondView.alpha = 0.5
}
}
这样,根据您点击的UIView,alpha会改变......
编辑:
在此代码中,UIViews将被“选中” - alpha将改变,并将在0.8秒的设定时间内改变。
class ViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet weak var myView: UIView!
@IBOutlet weak var secondView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
tap.delegate = self
myView.addGestureRecognizer(tap)
let tap2 = UITapGestureRecognizer(target: self, action: #selector(self.tap2(_:)))
tap.delegate = self
secondView.addGestureRecognizer(tap2)
}
func tap(_ gestureRecognizer: UITapGestureRecognizer) {
myView.alpha = 0.5
UIView.animate(withDuration: 0.8, animations: {
self.myView.alpha = 1
})
}
func tap2(_ gestureRecognizer: UITapGestureRecognizer) {
secondView.alpha = 0.5
UIView.animate(withDuration: 0.8, animations: {
self.secondView.alpha = 1
})
}
}