la mia prima risposta, anche con il disegno, era disordinato. L'ho cancellato.
Quindi, ecco diversi modi per ottenere ciò che stai cercando. Supponiamo che la tua regione sia un UIView.
Soluzione 1
si recupera il punto dal vista principale, quindi è necessario verificare se il cornice della vostra regionView contiene il punto.
import UIKit
class ViewController: UIViewController {
@IBOutlet var regionView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let tap = UITapGestureRecognizer()
tap.addTarget(self, action: "handleTap:")
self.view.addGestureRecognizer(tap)
}
func handleTap(tap: UITapGestureRecognizer) {
if (tap.state == UIGestureRecognizerState.Ended) {
println("[handleTap] Tap ended")
var point = tap.locationInView(self.view)
println("[handleTap] Tap point : x\(point.x) ; y\(point.y) (in self.view)")
if (CGRectContainsPoint(self.regionView.frame, point)) {
println("[handleTap] Tap is inside regionView")
}
println()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Soluzione 2
si recupera il punto e convertire esso all'interno regionView sistema di coordinate. Quindi è necessario verificare se il punto è all'interno dei limiti di regionView.
import UIKit
class ViewController: UIViewController {
@IBOutlet var regionView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let tap = UITapGestureRecognizer()
tap.addTarget(self, action: "handleTap:")
self.view.addGestureRecognizer(tap)
}
func handleTap(tap: UITapGestureRecognizer) {
if (tap.state == UIGestureRecognizerState.Ended) {
println("[handleTap] Tap ended")
var point = tap.locationInView(self.view)
println("[handleTap] Tap point : x\(point.x) ; y\(point.y) (in self.view)")
point = self.regionView.convertPoint(point, fromView: self.view)
println("[handleTap] Tap point converted : x\(point.x) ; y\(point.y) (in self.regionView)")
if (CGRectContainsPoint(self.regionView.bounds, point)) {
println("[handleTap] Tap is inside regionView")
}
println()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Soluzione 3
si ottiene il punto dal regionView direttamente.Quindi non c'è bisogno di convertire esso, tuttavia è comunque necessario verificare se è entro i suoi confini come soluzione 2.
import UIKit
class ViewController: UIViewController {
@IBOutlet var regionView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let tap = UITapGestureRecognizer()
tap.addTarget(self, action: "handleTap:")
self.view.addGestureRecognizer(tap)
}
func handleTap(tap: UITapGestureRecognizer) {
if (tap.state == UIGestureRecognizerState.Ended) {
println("[handleTap] Tap ended")
var point = tap.locationInView(self.regionView)
println("[handleTap] Tap point : x\(point.x) ; y\(point.y) (in self.view)")
if (CGRectContainsPoint(self.regionView.bounds, point)) {
println("[handleTap] Tap is inside regionView")
}
println()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
In alternativa, è possibile impostare solo il vostro riconoscitore gesto sul regionView: self.regionView.addGestureRecognizer(tap)
.
Fammi sapere se ha aiutato!
Pensa ai diversi sistemi di coordinate che stai utilizzando qui ... – matt
Non capisco – Omer
Prima di chiamare CGRectContainsPoint hai bisogno di un rect e un punto _in lo stesso sistema di coordinate_. Quello che vorrei fare è convertire 'point' nel sistema di coordinate di' self.Region' stesso, e ora confrontare 'point' con' self.Region.bounds'. Vedi il mio libro: http://www.apeth.com/iOSBook/ch14.html#_frame e http://www.apeth.com/iOSBook/ch14.html#_bounds_and_center – matt