Передача касания следующему отвечающему или другому подчиненному -вид iOS

Я уверен, что эта проблема будет легко решена, однако я относительно новичок в разработке iOS. Я пытаюсь обработать передачу событий касания дочерним элементам, которые находятся ниже в порядке отрисовки в UIView. Например-

Я создаю расширенный UIImageView для создания моего класса MoveableImage. Этот класс в основном представляет собой UIImageView, который реализует touchesBegan, touchesEnded и touchesMoved -

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{


[self showFrame];

//if multitouch dont move
if([[event allTouches]count] > 1)
{
    return;
}



    UITouch *touch = [[event touchesForView:self] anyObject ];

    // Animate the first touch
    CGPoint colorPoint = [touch locationInView:self];

    CGPoint touchPoint = [touch locationInView:self.superview];


    //if color is alpha of 0, they are touching the frame and bubble to next responder
    UIColor *color = [self colorOfPoint:colorPoint];
    [color getRed:NULL green:NULL blue:NULL alpha:&touchBeganAlpha];
    NSLog(@"alpha : %f",touchBeganAlpha);

    if(touchBeganAlpha > 0)
    {
          [self animateFirstTouchAtPoint:touchPoint];
    }
    else {
        [super.nextResponder touchesBegan:touches withEvent:event];
    }



}

. Таким образом, конечный результат в основном такой: -Если они касаются фрейма imageView, а не изображения внутри другого изображения, которое будет под ним, они могут ответить. См. это изображение для примера.

Passing touch to lower view

До сих пор я пробовал следующий ответчик, однако это не решает проблему. Любая помощь будет принята с благодарностью!

Решено -Перестал проверять альфу на touchesBegan и touchesMoved. Ovveriding pointInside позволил UIView справиться с этим за меня.

-(BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *) event
{
  BOOL superResult = [super pointInside:point withEvent:event];
  if(!superResult)
  {
   return superResult;
  }

  if(CGPointEqualToPoint(point, self.previousTouchPoint))
  {
     return self.previousTouchHitTestResponse;
  }else{
     self.previousTouchPoint = point;
  }

  BOOL response = NO;

  //if image is nil then return yes and fall back to super
  if(self.image == nil)
   {
     response = YES;
   }

  response = [self isAlphaVisibleAtPoint:point];
  self.previousTouchHitTestResponse = response;
  return response;





}
5
задан thebringking 14 August 2012 в 16:42
поделиться