Позволяя прикосновению проходить сквозь прозрачные изображения - PullRequest
2 голосов
/ 19 февраля 2012

Я использую фрагмент кода, который обнаружил, чтобы передавать сенсорные события через прозрачные части UIImageView. Я подклассифицирую UIImageView и добавляю это:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    unsigned char pixel[1] = {0};
    CGContextRef context = CGBitmapContextCreate(pixel, 
                                                 1, 1, 8, 1, NULL,
                                                 kCGImageAlphaOnly);
    UIGraphicsPushContext(context);
    [self.image drawAtPoint:CGPointMake(-point.x, -point.y)];
    UIGraphicsPopContext();
    CGContextRelease(context);
    CGFloat alpha = pixel[0]/255.0;
    BOOL transparent = alpha < 0.01;
    if(transparent){
        return NO;
    } else {
        return YES;
    }
}

Пока что он отлично работает в моей версии для iPad. Однако в моей версии для iPhone я установил рамки изображения равными половине фактического размера изображения (self.image.frame.size.width/2). Этот код странным образом мешает моим жестам панорамирования, и если я касаюсь левого верхнего угла изображения, я не могу получить доступ к жесту панорамирования, но могу получить доступ к крайнему правому нижнему углу, после фактического изображения в прозрачную зону.

Удаление кода возвращает жест панорамирования в нормальное состояние. Тем не менее, я все еще хотел бы сохранить возможность игнорировать прикосновения к прозрачным деталям. Кто-нибудь знает, какая часть этого кода мешает моим точкам касания или какая-то другая причина, по которой он так себя ведет?

Спасибо

1 Ответ

0 голосов
/ 29 ноября 2018

Я знаю, что этот вопрос очень старый, но мне просто пришлось использовать его в проекте, и моя проблема заключалась в том, что я устанавливал фрейм imageView вручную. Помогло изменение кода, поэтому изменение размера осуществлялось только с помощью преобразований.

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

Таким образом, в вашей версии iPhone вы можете установить рамку imageView в соответствии с размером изображения внутри него, а затем применить масштабирующее преобразование к нему, чтобы оно составляло половину размера.

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