Нарисуйте фигуру в Obj-C (iPad) и посмотрите, нажал ли я на нее - PullRequest
0 голосов
/ 19 мая 2011

У меня есть два uiviews, которые перекрываются с некоторыми pngs странной формы внутри.Я хочу нарисовать невидимую фигуру поверх каждого пользовательского интерфейса и определить, коснулся ли я этих фигур.В противном случае кран может быть виден по наложению.Я думал, что мой код, приведенный ниже, позволит этому случиться, но никаких прикосновений не видно.

-(void)drawRect:(CGRect)rect {
    quadrantOnePath = CGPathCreateMutable();
    CGPathMoveToPoint(quadrantOnePath, NULL, 30, 214);
    CGPathAddLineToPoint(quadrantOnePath, NULL, 281, 47);
    CGPathAddLineToPoint(quadrantOnePath, NULL, 493, 51);
    CGPathAddLineToPoint(quadrantOnePath, NULL, 306, 376);
    CGPathCloseSubpath(quadrantOnePath);
}

//in viewdidload

UITapGestureRecognizer *tapBlueRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewBlueFloorplans:)];
[tapBlueRecognizer setNumberOfTapsRequired:1];
[tapBlueRecognizer setDelegate:self];
[floorBlueHolderview addGestureRecognizer:tapBlueRecognizer];


// viewbluefunction
-(void)viewBlueFloorplans:(id)sender meso:(UIGestureRecognizer *)recognizer {

   CGPoint factor = [recognizer locationOfTouch:0 inView:self.view];
   bool processTouch = CGPathContainsPoint(quadrantOnePath, NULL, factor, true);

   if(processTouch) {
    NSLog(@"tap_viewBLU");
   }
}

1 Ответ

1 голос
/ 19 апреля 2012

1, на самом деле вам не нужно рисовать фигуру, чтобы иметь возможность использовать CGPathContainsPoint. Если вы знаете, что форма правильная, тогда введите

quadrantOnePath = CGPathCreateMutable();
CGPathMoveToPoint(quadrantOnePath, NULL, 30, 214);
CGPathAddLineToPoint(quadrantOnePath, NULL, 281, 47);
CGPathAddLineToPoint(quadrantOnePath, NULL, 493, 51);
CGPathAddLineToPoint(quadrantOnePath, NULL, 306, 376);
CGPathCloseSubpath(quadrantOnePath);

в "viewdidload", если форма не изменяется. (Чтобы предотвратить утечки памяти, не забудьте освободить quadrantOnePath) Если вы не хотите отлаживать фигуру, нарисуйте ее.

2, @selector(viewBlueFloorplans:) НЕ будет звонить -(void)viewBlueFloorplans:(id)sender meso:(UIGestureRecognizer *)recognizer

@selector(viewBlueFloorplans:) БУДЕТ ЗВОНИТЬ -(void)viewBlueFloorplans:(UIGestureRecognizer *)recognizer

3, Если вы на самом деле не реализуете методы делегата, тогда не следует устанавливать [tapBlueRecognizer setDelegate:self]; (чтобы сэкономить некоторые вычисления).

...