Как мне сфокусировать UIView? - PullRequest
0 голосов
/ 02 февраля 2019

Я хочу реализовать такие функции, как переключатели .Более конкретно, я хочу реализовать возможность выбора только одного UIView из нескольких UIView s.Это похоже на Focus Engine на tvOS .

enter image description here

При поиске релевантного этого язаметил, что UIKit поддерживает Навигация на основе фокуса .Но я не уверен, поддерживает ли это именно то, что я хочу.Также не хватает дополнительных релевантных примеров.

Я хотел бы услышать некоторую помощь и совет по связанным функциям.Подходит ли Навигация на основе фокуса для цели, которую я преследовал?И есть ли другие хорошие способы реализовать функциональность, которую я хочу реализовать?

1 Ответ

0 голосов
/ 02 февраля 2019

@ Paulw Спасибо за вашу любезную помощь.

Следующие шаги решили проблему!

Я использовал простой способ, который воздействует на указанный UIView среди множества UIViews.

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
            }
        }
    }
}
...