自定义按钮检测图像外的动作

时间:2011-10-25 16:30:46

标签: iphone button action

我正在开发一个应用程序,我的要求是更改点击按钮的图像。图像基本上是国家的地图。所以,问题是我做了一个自定义按钮,但它检测到图像外的动作同样(因为图像是弯曲的,默认情况下按钮是圆角矩形)。所以我可以根据图像完全自定义按钮。

由于

1 个答案:

答案 0 :(得分:0)

如果你的意思是自定义形状的按钮(自定义可点击区域)我写了一些方法来检查,UIImage中的那个点是否透明:

- (BOOL) pointInNontransparentArea:(CGPoint)point {
    CGImageRef imageRef = [imageView.image CGImage];
    NSData* data = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(imageRef));

    unsigned char *pixels = (unsigned char *)[data bytes];

    size_t width                    = CGImageGetWidth(imageRef);
    size_t bitsPerComponent         = CGImageGetBitsPerComponent(imageRef);
    size_t bitsPerPixel             = CGImageGetBitsPerPixel(imageRef);

    size_t numberOfComponents = bitsPerPixel / bitsPerComponent;

    int pixelNumber = point.y * width + point.x;
    int byteNumber = pixelNumber * numberOfComponents + numberOfComponents - 1;

    unsigned char transparencyColor = pixels[byteNumber];

    [data release];

    if(transparencyColor != 0)
        return YES;
    else
        return NO;
}

如果您的按钮图像具有透明背景,则很容易 - 只需在按钮视图中检查触摸位置,然后检查透明区域中的忽略触摸。

您也可以查看Ole Begemann课程: http://oleb.net/blog/2009/10/obshapedbutton-non-rectangular-buttons-on-the-iphone/