Iphone 带Png图像的UIView-忽略透明区域中的触摸
我有一个带有透明背景的圆形PNG作为子视图添加。我使用这种方法来旋转它: CGPoint location=[触摸位置视图:self.view]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
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
}
}