2015-04-22 3 views
0

Эй, я использую этот код, чтобы имитировать вид ручки в моем приложении:IOS сделать gestureRecognizer слушать вне поля зрения

- (void) setupGestureRecognizer 
{ 
    CGPoint midPoint = CGPointMake(image.frame.origin.x + image.frame.size.width/2, 
            image.frame.origin.y + image.frame.size.height/2); 
    CGFloat outRadius = image.frame.size.width/2; 
    gestureRecognizer = [[OneFingerRotationGestureRecognizer alloc] initWithMidPoint: midPoint 
                     innerRadius: outRadius/10 
                      outerRadius: outRadius *2 
                       target: self]; 
    [self.view addGestureRecognizer: gestureRecognizer]; 
} 

Как это, gestureRecognizer обрабатывает все события, которые происходят на или очень близко к кнопке. То, что я хочу следующее:

  • gestureRecognizer только получает срабатывает, когда пользователь прикасается внутри изображение
  • если палец оставляет изображение, gestureRecognizer следует продолжать
    прослушивания (и вычисление угла)

На Android Я делаю это так:

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     float x = e2.getX()/((float) getWidth()); 
     float y = e2.getY()/((float) getHeight()); 
     float rotDegrees = cartesianToPolar(1 - x, 1 - y); 

     [...doing maths stuff here] 

У меня есть все вращающиеся вещи, но как вы делаете работу gestureRecognizer, как вы можете обрабатывать события в Android? Если бы я потерял соединение с Интернетом и не имел другого выбора, кроме как самостоятельно его закодировать, я бы просто взял два разных распознавателя жестов, обратившись к прессе «init» и «следуя за пальцем» повсюду, установив соответствующую ручку в соответствии с ключом значение устанавливается в первом знаке распознавания жестов. Но это похоже на массивную груду плохого кода для меня, поэтому я был бы признателен за некоторые советы по этому поводу.

Cheers, Алекс

ответ

1

Вы должны быть в состоянии использовать метод делегата, gestureRecognizer:shouldReceiveTouch: изучить расположение на ощупь, и вернуть YES только если точка касания находится в пределах вида изображения (используя CGRectContainsPoint). Если распознаватель жестов добавлен в супервизор изображения, он должен продолжить «прослушивание», как вы хотите.

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    CGPoint touchPoint = [touch locationInView:self.view]; 
    return CGRectContainsPoint(self.imageView.frame, touchPoint); 
} 

Также не забудьте установить контроллер в качестве делегата распознавателя жестов.

+0

спасибо помощнику, который звучит потрясающе. Попробуй скоро и сообщишь, наслаждайся своим днем! Обновление – user2875404

+0

: мне потребовались годы, чтобы понять, что вам также нужно добавить gestureRecognizer.delegate = self; при настройке gestureRecognizer, и вы можете добавить это к своему ответу, но так много спасибо! – user2875404

+1

@ user2875404, я обновил, чтобы добавить это. – rdelmar

Смежные вопросы