- Xcode 8.3.3
- Swift 3.1
import UIKit class ExampleViewController: UIViewController { private var _Dismiss: Bool = false private let TAG: Int = 100 override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.gray _Dismiss = false let viewAdd = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 400)) viewAdd.backgroundColor = UIColor.white viewAdd.center = self.view.center viewAdd.tag = TAG self.view.addSubview(viewAdd) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } override func touchesBegan(_ touches: Set<uitouch>, with event: UIEvent?) { if _Dismiss { return } let point = touches.first?.location(in: self.view) let viewAdd: UIView = self.view.viewWithTag(TAG)! as UIView if !viewAdd.frame.contains(point!) { _Dismiss = true // 範囲外をタッチした時の処理 } } }
touchesBeganなので指が画面に触れた時のイベントです。
touchesEndedにすれば指が画面から離れた時のイベントになります。
ただ、touchesBeganに画面制御を記述すると反応の早い、ユーザビリティの高いアプリとユーザに判断されます。まぁこれも使い所次第ですが😅
課金とかにtouchesBeganで処理されたら私は速攻アプリアンインストールします😅
なんか信用出来ないですからね…
というかUIがボタンならBeganでselectな制御(グレースケールしたりとか縮小させたりとか)して、Movedで範囲内外を判定、Endedで範囲内(というかBeganで触ったものと同一のままならとか)ならselectedな制御して範囲外なら何もしない(タッチ状態フラグを解除程度)みたいな制御が普通ですね。
こういう制御例ってあまりネットに載らないですよね😇
各社ノウハウとして溜まってるだけで。
まぁ気が向いたらその辺も公開していきます🙌掲載するコード量がとんでもないことになりそう😇
0 件のコメント:
コメントを投稿