Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 带Png图像的UIView-忽略透明区域中的触摸_Iphone_Xcode_Transparency_Alpha - Fatal编程技术网

Iphone 带Png图像的UIView-忽略透明区域中的触摸

Iphone 带Png图像的UIView-忽略透明区域中的触摸,iphone,xcode,transparency,alpha,Iphone,Xcode,Transparency,Alpha,我有一个带有透明背景的圆形PNG作为子视图添加。我使用这种方法来旋转它: CGPoint location=[触摸位置视图:self.view] if(CGRectContainsPoint(wheelfrom.frame, location)) { } 问题是图像的透明区域正在注册为UIView的一部分。有没有办法在触摸时忽略这些区域?是否有更好的方法来设置UIView以识别透明度 谢谢 您可以检查图像的rbga像素颜色,并查看a(=α值)是否==0(或快速解决方案: class Radi

我有一个带有透明背景的圆形PNG作为子视图添加。我使用这种方法来旋转它:

CGPoint location=[触摸位置视图:self.view]

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

}
问题是图像的透明区域正在注册为UIView的一部分。有没有办法在触摸时忽略这些区域?是否有更好的方法来设置UIView以识别透明度


谢谢

您可以检查图像的rbga像素颜色,并查看a(=α值)是否==0(或快速解决方案:

class RadiusTouchButton: UIButton {
  override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    let radius = frame.size * 0.5
    let delta = point - CGPoint(x: radius.height, y: radius.width)
    return hypot(delta.x, delta.y) <= radius.height
  }
}
class RadiustTouchButton:UIButton{
覆盖功能点(内部点:CGPoint,带有事件:UIEvent?->Bool{
让半径=框架尺寸*0.5
设delta=点-CGPoint(x:radius.height,y:radius.width)

return hypot(delta.x,delta.y)我不知道掩码的形状,但是如果它很小:知道有些用户的手指很胖。:)还没有掩码。它只是一个视图。-(id)initWithFrame:(CGRect)frame{self=[super initWithFrame:frame];if(self){UIImage*image1=[UIImage imageNamed:@”nav@2x.png"];wheelfrom=[[UIImageView alloc]initWithImage:image1];wheelfrom.frame=CGRectMake(10,-130300300);[self-addSubview:wheelfrom];}返回self;}有没有办法遮住这个圆?谢谢你的回复…那还会使用CGRectContainsPoint函数吗?我会四处寻找2d解决方案,谢谢!你知道有什么样的代码可以澄清半径检查吗?哇,非常感谢!我正在尝试,但是非常感谢你发布这个!说真的,你帮了我大忙把我弄明白了,它工作得很好。我真的很感激!
    - (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!!");
        }
    }
class RadiusTouchButton: UIButton {
  override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    let radius = frame.size * 0.5
    let delta = point - CGPoint(x: radius.height, y: radius.width)
    return hypot(delta.x, delta.y) <= radius.height
  }
}