2016-10-12 9 views
0

私は、ワンタッチでUIViewを '選択'するための方法論に挑戦したいと考えています。私のUIでは、私はいくつかのUIViewを持っています。選択されている間は、アルファ(どのビューが選択されているかをユーザーに知らせる)や、メニュー項目の一意のセットを明らかにするなど、少し高度な機能などの基本的な調整を行うコントロールがあります。一度に1つのビューしか選択できません。ここでマルチタッチはありません。xcode/swift 3でビューをタップして「選択」してください

問題は、私はこれがUICollectionViewCellsでのみ行われていることです。私のインターフェースはコレクションビューを利用していないので、それは問題ではありません。

思考プロセスは、1つのタップジェスチャーでuiviewを '選択'し、次にビュー境界の外側をタップすることで '選択解除'します。

もう1つの考えプロセスは、Selected状態を利用するためにUIViewの代わりにUIButtonsを使用することです。

これはもっと有効な解決策ですか?これはUIViewだけでも可能ですか?それとも、代わりにUIButtonsを取り返して行くべきですか?

ありがとうございました。

答えて

7

あなたは次にあなたがジェスチャー認識機能にあなたのUIViewに起こるものは何でも処理するコードを追加する必要が希望の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) 

    } 

} 

にジェスチャー認識を追加する必要があります。

func tap(_ gestureRecognizer: UITapGestureRecognizer) { 
    myView.alpha = 0.5 
} 

このUIViewが選択されると、UIViewのアルファプロパティが0.5に変更されます。 enter image description hereenter image description here

今、あなたは、例えば、ジェスチャー認識を有する第2のUIViewを入れて、アルファで遊ぶことができる:その方法を

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のに応じて、あなたがヒット、アルファが変更されます...

enter image description hereenter image description here

編集:

このコードでは、UIViewが「選択」されます。アルファは変更され、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 
     }) 
    } 

} 
+0

私は、迅速な3 –

+0

おかげダビデにそれを翻訳するのXcodeを開いた瞬間によ!私はあなたのコードが働いている。単にそれを「選択解除」できる必要があります(つまり、アルファは1に戻ります)。一度に1つのビューしか選択されていません。 – Joe

+0

私の編集の仲間を参照してください –

関連する問題