2012-09-21 2 views
0

У меня есть один базовый вид A с размером (0,0,320,280), он содержит другой вид B размером (100,100,50,50) и View B имеет одну кнопку и одно изображение view (C) в качестве суб-представления. Рамка изображения выглядит так же, как и вид B, кнопка добавлена ​​в верхний левый угол B.Superview не получает сенсорное действие

Мое требование, когда мы перетаскиваем правый правый угол B, его размер должен увеличиваться или уменьшаться.

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

Моя проблема в том, что B не получает касание.

Я добавил код ниже. пожалуйста, направляйте меня.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 

    //baseVw-------> view B// 

    if ([touch view]==baseVw) 
    { 
     touchStart = [[touches anyObject] locationInView:baseVw]; 
     isResizingLR = (baseVw.bounds.size.width - touchStart.x < kResizeThumbSize && baseVw.bounds.size.height - touchStart.y < kResizeThumbSize); 
     isResizingUL = (touchStart.x <kResizeThumbSize && touchStart.y <kResizeThumbSize); 
     isResizingUR = (baseVw.bounds.size.width-touchStart.x < kResizeThumbSize && touchStart.y<kResizeThumbSize); 
     isResizingLL = (touchStart.x <kResizeThumbSize && baseVw.bounds.size.height -touchStart.y <kResizeThumbSize); 
    } 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint touchPoint = [[touches anyObject] locationInView:baseVw]; 
    CGPoint previous=[[touches anyObject]previousLocationInView:baseVw]; 
    float deltaWidth = touchPoint.x-previous.x; 
    float deltaHeight = touchPoint.y-previous.y; 

    if ([touch view]==baseVw) 
    { 
     if (isResizingLR) 
     { 
      baseVw.frame = CGRectMake(baseVw.frame.origin.x, baseVw.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth); 
     } 
     else 
     { 
      CGPoint activePoint = [[touches anyObject] locationInView:baseVw]; 

      // Determine new point based on where the touch is now located 
      CGPoint newPoint = CGPointMake(baseVw.center.x + (activePoint.x - touchStart.x), 
             baseVw.center.y + (activePoint.y - touchStart.y)); 

      //-------------------------------------------------------- 
      // Make sure we stay within the bounds of the parent view 
      //-------------------------------------------------------- 
      float midPointX = CGRectGetMidX(baseVw.bounds); 

      // If too far right... 
      if (newPoint.x > baseVw.superview.bounds.size.width - midPointX) 
       newPoint.x = baseVw.superview.bounds.size.width - midPointX; 
      else if (newPoint.x < midPointX) // If too far left... 
       newPoint.x = midPointX; 

      float midPointY = CGRectGetMidY(baseVw.bounds); 

      // If too far down... 
      if (newPoint.y > baseVw.superview.bounds.size.height - midPointY) 
       newPoint.y = baseVw.superview.bounds.size.height - midPointY; 
      else if (newPoint.y < midPointY) // If too far up... 
       newPoint.y = midPointY; 

      // Set new center location 
      baseVw.center = newPoint; 
     } 
    } 
} 
+0

В вашем 'UIImageView' (т.е. ** C **) есть' userInteractionEnabled = YES'? – Hemang

+0

Да, я установил userInteractionEnabled = YES – thavasidurai

+0

Итак, если вы добавляете логические операторы, представление «B» никогда не будет трогать. Почему бы не сделать кнопку подпункта «B», а не UIImageView - она ​​казалась бы более чистой. Я также предполагаю, что «B» больше, чем кнопка и изображение. «B» имеет userInteractionEnabled. –

ответ

0

View B, вероятно, не получает каких-либо событий прикосновения, потому что они поглощаются подвид C. Если предположить, что вы реализуете методы сенсорными в B вы также должны убедиться, что вы установили B в качестве firstResponder. Реализовать это:

-(BOOL)canBecomeFirstResponder 
{ 
return YES; 
} 

И затем вызвать [self becomeFirstResponder]; после добавления C как подвид. Код внутри touchhesBegan/Moved не имеет значения, если они не вызываются (события касания не принимаются).

+0

спасибо за ваш ответ. я пробовал свой путь, но не работал – thavasidurai

+0

Можете ли вы проверить, получает ли ваш просмотр изображения (C) события касания? Если это так, вы можете установить представление B как делегата для представления C и передать ему все события касания. –

+0

Да, просмотр изображения получает событие касания. вы можете указать пример кода для делегирования – thavasidurai

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

  • Нет связанных вопросов^_^