允许触摸通过透明图像

时间:2012-02-19 09:16:00

标签: iphone ios xcode ipad

我正在使用我发现的一段代码通过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 :(得分:0)

我知道这个问题很老,但是我只需要在项目中使用它,我的问题是我是手动设置imageView框架。有助于更改代码,因此调整大小只能通过转换来完成。

如果imageView最初与其中的图像大小相同,则可以使用此代码,它将与之后应用于imageView的任何变换一起使用。

因此,在您的iPhone版本中,您可以将imageView的框架设置为其中图像的大小,然后对其应用缩放变换,使其尺寸减小一半。