Пользовательская кнопка обнаружения действия внешнего изображения - PullRequest
0 голосов
/ 25 октября 2011

Я занимаюсь разработкой приложения, и мое требование состоит в том, чтобы изменить изображение кнопки при нажатии. Изображения - это, в основном, карты стран. Итак, проблема в том, что я сделал пользовательскую кнопку, но она обнаруживает действие за пределами изображения.также (потому что изображение изогнуто, а кнопка по умолчанию закруглена). Так есть ли способ, которым я могу настроить кнопку точно в соответствии с изображением.

Спасибо

1 Ответ

0 голосов
/ 25 октября 2011

Если вы имеете в виду кнопку с пользовательской формой (настраиваемой областью нажатия), я написал некоторый метод для проверки, прозрачна ли точка в 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;
}

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

Также вы можете проверить класс Оле Бегеманна: http://oleb.net/blog/2009/10/obshapedbutton-non-rectangular-buttons-on-the-iphone/

...