Benim ilk cevap, hatta kroki ile, dağınık oldu. Onu sildim.
İşte aradığınız şeyi elde etmenin birden çok yolu var. Bölgenizin UIView olduğunu varsayalım.
Eğer regionView ait çerçeve açınızı içeriyorsa kontrol etmeniz gerekir, böylece Ana görünümde gelen noktayı alınıyor 1
Çözüm.
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.
}
}
Noktayı alınıyor ve iç regionView için o dönüştürmek 2
Çözüm sistemini koordine eder. Bu yüzden, noktanızın bölgenizin sınırları sınırları içinde olup olmadığını kontrol etmeniz gerekir. 3
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.
}
}
Çözüm Doğruca regionView dan noktası olsun.Yani sadece regionView üzerinde jest tanıyıcı ayarlayabilirsiniz, ancak yine de 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.
}
}
Alternatif çözüm gibi kendi sınırları içinde olup olmadığını kontrol etmek gerekir, dönüştürmek gerekmez : self.regionView.addGestureRecognizer(tap)
.
Yardım ederse bana bildirin!
Burada kullandığınız farklı koordinat sistemlerini düşünün ... – matt
Anlamadım – Omer
CGRectContainsPoint'i aramadan önce, bir rekt ve _in aynı koordinat sistemi_in. Yapmam gereken şey 'point'ı self.Region'un kendi koordinat sistemine dönüştürmek ve şimdi' point' i selfini self.Region.bounds' ile karşılaştırmak. Kitabıma bakın: http://www.apeth.com/iOSBook/ch14.html#_frame ve http://www.apeth.com/iOSBook/ch14.html#_bounds_and_center – matt