iphone – 带有Png图像的UIView – 忽略透明区域的触摸

我有一个圆圈的PNG,透明背景作为子视图添加.我正在使用这种类型的方法来旋转它:

CGPoint location = [touch locationInView:self.view];

if(CGRectContainsPoint(wheelfrom.frame, location))
{

}

问题是图像的透明区域是作为UIView的一部分注册的.触摸时有没有办法忽略这些区域?有没有更好的方法让我设置UIView来识别透明度?

谢谢!

最佳答案 你可以检查图像的rbga像素颜色,看看(= alpha值)是否= = 0(或< = aLowValue)……正如Igor Pchelko建议的…… 但在你的情况下,它可能会更容易……

你正在使用一个2D圆圈,所以只需检查手指咔哒声远离圆心的情况,看看它是否超出了它的半径……只是一个Pitagora的定理应用……

编辑:

好的,所以,如果你为你的按钮创建一个新的类子类UIButton:

在YourButton.h中:

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface YourButton : UIButton {

}

@end

在YourButton.m中只需添加以下代码:

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        UITouch *touch = [[event allTouches] anyObject];
        CGPoint touchPoint = [touch locationInView:self];
        NSLog(@"Touch x : %f y : %f", touchPoint.x, touchPoint.y);
        float circleRadius = self.frame.size.height / 2; // considering a circle inscricted in a quadRect (width = height)
        float deltaTouchOnCenterX = touchPoint.x - circleRadius;
        float deltaTouchOnCenterY = touchPoint.y - circleRadius;
        float touchDistanceFromCenter = sqrt((deltaTouchOnCenterX * deltaTouchOnCenterX) + (deltaTouchOnCenterY * deltaTouchOnCenterY) );
// or:  float touchDistanceFromCenter = hypot(deltaTouchOnCenterX,deltaTouchOnCenterY);

        NSLog(@"sqrt_val: %f", touchDistanceFromCenter);
        NSLog(@"Touch on center x : %f y : %f", deltaTouchOnCenterX, deltaTouchOnCenterY);
        if (touchDistanceFromCenter <= circleRadius) {
            // your code here
            NSLog(@"___ OK: You are inside the circle!!");
        }
    }
点赞