(UIView *) HitTest проблема? - PullRequest
       5

(UIView *) HitTest проблема?

0 голосов
/ 21 сентября 2010

У меня есть один Masterview.it имеет много дочерних представлений. Я использую следующий код, чтобы обнаружить затронутое представление и вывести на передний план соответствующее представление. Код работает нормально. Но когда я добавляю подпредставление в дочернее представление, оно не работает Любая помощь, пожалуйста?

 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;
 {
self.hitView = nil;
self.hitView = [super  hitTest:point withEvent:event];
int x =  self.hitView.frame.origin.x;
int y =  self.hitView.frame.origin.y;
NSLog(@"x = %d",x);
NSLog(@"y = %d",y);
if ([self.viewDelegate respondsToSelector:
         @selector(view:hitTest:withEvent:hitView:)])
{
    return [self.viewDelegate view:self hitTest:point
                             withEvent:event hitView:hitView];
}
else
{

       [self bringSubviewToFront:self.hitView];
    return hitView;
}

}

Ответы [ 2 ]

8 голосов
/ 21 сентября 2010

Если я правильно понял, это довольно просто: hitTest всегда возвращает самое дальнее дочернее подпредставление в представлении.Если нет подпредставления, это всегда один и тот же вид.Если он есть, это подпредставление может быть возвращено взамен.Вот как вы можете это исправить:

self.hitView = [super hitTest:point withEvent:event];
if ([self.hitView isDescendantOfView: self])
  self.hitView = self;

РЕДАКТИРОВАТЬ Теперь, когда я лучше понимаю проблему, вам, возможно, следует сделать следующее.Этот код возвращает суперпредставление, которое является прямым потомком внешнего представления:

UIView *hitView = [super hitTest:point withEvent:event];
while (hitView && hitView.superview != self)
  hitView = hitView.superview;

(Обратите также внимание, что вы должны использовать локальную переменную и изменить свое свойство позже, чем).

0 голосов
/ 21 сентября 2010

Как вы сказали, вы перемещаете UIViews вокруг.Вы должны посмотреть видео с WWDC 2010 , где они достигают этого эффекта с новым GestureRecognizer Class .

Видео, которое вы должны искать, называется что-то с «Gesture Recognition».Если вы не найдете его, я могу связать его, когда вернусь с работы.

Желаю вам удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...