Я работаю над графическим калькулятором для iPad, и я хотел добавить функцию, в которой пользователь может коснуться области в виде графика, чтобы всплывающее окно отображало координату точки, к которой они касались. Как я могу получить CGPoint?
Как получить CGPoint из удаленного места?
Ответ 1
у вас есть два пути...
1.
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
}
здесь вы можете получить местоположение с точкой из текущего представления...
2.
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[tapRecognizer setNumberOfTapsRequired:1];
[tapRecognizer setDelegate:self];
[self.view addGestureRecognizer:tapRecognizer];
здесь, этот код используется, когда вы хотите сделать что-то со своим перкулярным объектом или подвид вашего основного вида
Ответ 2
Попробуйте это
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
// Get the specific point that was touched
CGPoint point = [touch locationInView:self.view];
NSLog(@"X location: %f", point.x);
NSLog(@"Y Location: %f",point.y);
}
Вы можете использовать "touchesEnded", если вы предпочтете, где пользователь отпустил свой палец от экрана, а не там, где он коснулся.
Ответ 3
вероятно, лучше и проще использовать UIGestureRecognizer с видом карты вместо того, чтобы пытаться подклассифицировать его и перехватить ссылки вручную.
Шаг 1: сначала добавьте распознаватель жестов к виду карты:
UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(tapGestureHandler:)];
tgr.delegate = self; //also add <UIGestureRecognizerDelegate> to @interface
[mapView addGestureRecognizer:tgr];
Шаг 2: Затем следует реализовать shouldRecognizeSimultaneousWithGestureRecognizer и вернуть YES, чтобы ваш распознаватель жестов мог работать одновременно с картой (иначе краны на выводах не будут автоматически обрабатываться картой):
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer
:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
Шаг 3: Наконец, выполните обработчик жестов:
- (void)tapGestureHandler:(UITapGestureRecognizer *)tgr
{
CGPoint touchPoint = [tgr locationInView:mapView];
CLLocationCoordinate2D touchMapCoordinate
= [mapView convertPoint:touchPoint toCoordinateFromView:mapView];
NSLog(@"tapGestureHandler: touchMapCoordinate = %f,%f",
touchMapCoordinate.latitude, touchMapCoordinate.longitude);
}
Ответ 4
Если вы используете объект UIGestureRecognizer
или UITouch
, вы можете использовать метод locationInView:
для извлечения CGPoint
в пределах данного вида, который коснулся пользователь.
Ответ 5
Просто хочу добавить ответ Swift 4, потому что API совсем другой.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = event?.allTouches?.first {
let loc:CGPoint = touch.location(in: touch.view)
//insert your touch based code here
}
}
ИЛИ
let tapGR = UITapGestureRecognizer(target: self, action: #selector(tapped))
view.addGestureRecognizer(tapGR)
@objc func tapped(gr:UITapGestureRecognizer) {
let loc:CGPoint = gr.location(in: gr.view)
//insert your touch based code here
}
В обоих случаях loc
будет содержать точку, которая была затронута в представлении.
Ответ 6
func handleFrontTap(gestureRecognizer: UITapGestureRecognizer) {
print("tap working")
if gestureRecognizer.state == UIGestureRecognizerState.Recognized {
`print(gestureRecognizer.locationInView(gestureRecognizer.view))`
}
}