gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:19:30 25 4
gpt4 key购买 nike

我有一个带有透明背景的圆形 PNG 作为 subview 添加。我正在使用这种类型的方法来旋转它:

CGPoint位置 = [触摸locationInView:self.view];

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

}

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

谢谢!

最佳答案

您可以检查图像的 rbga 像素颜色,看看 a(=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!!");
}
}

关于iphone - 带有 Png 图像的 UIView - 忽略透明区域中的触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5316226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com