Вопрос по xcode, ipad, ios, touch, cgpoint – Как получить CGPoint из повернутого местоположения?

27

Я работаю над приложением для графического калькулятора для iPad и хочу добавить функцию, с помощью которой пользователь может коснуться области в графическом представлении, чтобы появилось всплывающее текстовое поле, отображающее координаты точки, к которой он прикоснулся. Как я могу получить CGPoint из этого?

Ваш Ответ

6   ответов
20

- (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);

}

Вы можете использовать & quot; touchesEnded & quot; если вы предпочитаете видеть, где пользователь убрал палец с экрана вместо того, где он коснулся экрана.

6

лучше и проще использовать UIGestureRecognizer с представлением карты вместо того, чтобы пытаться создать его подкласс и перехватывать касания вручную.

Шаг 1. Сначала добавьте распознаватель жестов в представление карты:

 UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] 
    initWithTarget:self action:@selector(tapGestureHandler:)];
 tgr.delegate = self;  //also add <UIGestureRecognizerDelegate> to @interface
 [mapView addGestureRecognizer:tgr];

Шаг 2: Затем внедрите shouldRecognizeSimralleluallyWithGestureRecognizer и верните 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);
}
Это хорошо полный ответ
0
func handleFrontTap(gestureRecognizer: UITapGestureRecognizer) {
    print("tap working")
    if gestureRecognizer.state == UIGestureRecognizerState.Recognized { 
        `print(gestureRecognizer.locationInView(gestureRecognizer.view))`
    }
}
47

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];

здесь, этот код используется, когда вы хотите что-то сделать с вашим perticular объектом или подвидом вашего mainview

4

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 будет содержать точку, которая была затронута в представлении.

3

UIGestureRecognizer или жеUITouch объект, который вы можете использоватьlocationInView: метод для извлеченияCGPoint в рамках данного представления пользователь коснулся.

Похожие вопросы