我有一个圆圈的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!!");
}
}